Excel 求教如何表格提高计算速度
1个回答
展开全部
一、 首先要合理设计数据的布局,这是计算效率得到保障的前提
由于Excel引用访问本工作表、不同工作簿或工作表数据的速度是有区别的,通常计算指向其他工作表的引用比计算工作表内的引用速度要慢。当数据计算量较大时,就必须考虑数据的整体布局:数据是分工作簿保存、分工作表保存,还是保存在同一工作表。
基于整体性原则,如果是清单型数据表格,可能的话,尽量将数据整合同一工作表,至少尽量在同一工作簿。如果不能整合在同一工作簿,宁愿使用少量的大型工作簿,也不要使用数量较多的小型工作簿。尽可能地避免工作簿间的链接,对外部工作簿进行链接,既影响表格的打开速度,并且当工作簿移动或删除时,还容易出现断链,不易于查找和修复。
二、不可避免引用其他工作簿时的提速技巧
对关闭的工作簿尽量使用简单的直接单元格引用。这样做可以避免在重新计算任何工作簿时重新计算所有链接的工作簿。
如果不能避免使用链接的工作簿,最好将它们全部打开而不是关闭,并且表格打开顺序也有讲究,要首先打开要链接到的工作簿,然后再打开包含链接的工作簿。一般来说,从打开的工作簿比从关闭的工作簿中读取链接的速度要快。
进一步提速的“断舍离”大法:
断:数据量大的表格,应将已经计算出结果且不会再更新的单元格的公式计算结果采用选择性粘贴方式转化为数值,以减少计算量;
舍:尽量不要大范围使用计算量大的功能或公式。比如:尽管条件格式和数据有效性的功能非常强大,数组公式运算功能也非常强大,但是,大量使用它们会明显降低计算速度,除非你愿意忍受蜗牛般的运算速度,否则,不要大范围使用数据有效性、条件格式和数组公式;
离:如果某张工作表需要进行大量运算,且其他工作表对它的引用较少,可考虑将其移出本工作簿。以免每次重新计算时,影响工作簿的整体计算速度。
三、 原始数据要规范
原始数据一定的规范,否则,还要使用函数公式清洗不规范的数据,徒增中间环节,影响计算速度。比如数据的来源不是手工输入,而是从其他系统导出,导出的数据可能并不规范,比如数字是文本格式、数字后有空格、不可见字符,这些数据就没法直接参与运算,如果不手工整理成规范数据,还得用函数公式进行规避,这就大大影响计算速度。
四、 要关注公式函数的计算效率,尽量使用效率高的函数,或使用其他功能代替。
1. 非必要的情况下,不使用可变函数(易失性函数)。
Excel的可变函数有:RAND、NOW、TODAY、OFFSET、CELL、INDIRECT和 INFO。可变函数有个特点,当数值发生变化时,每次都要重新计算,因而会影响表格的计算性能。
比如,我们常用的下面的公式来定义动态区域:
=OFFSET(Sheet1!$A$1,0,0,COUNTA(Sheet1!$A:$A),1)
它的好处是:会自动扩展以包含新条目,但表格的计算性能会降低,这是因为 OFFSET 是可变函数,并且由于 OFFSET 中的 COUNTA 函数必须检查很多行,计算效率较低。
一般情况下,我们可以使用Excel的表格功能来代替动态区域(Excel 2003中称为列表)。
2. 使用其他行和列计算并存储中间结果一次,以便在其他公式中重复使用它们。并且,如前所述,尽可能引用其他单元格已有的计算结果,这样可提高运算效率。
在C2单元格输入公式:
=SUM($A$2:$A2)
然后向下填充公式到 C2000。如上图。B列的公式是上一累加结果加上本行数字。B列的公式是引用了上一行单元格的计算结果,B列公式比C列公式单元格引用总数减少了 500 倍,计算量大大减少。
3. 减少每个公式中的引用数,最大程度地减少函数中的引用单元格范围。
尽管在 Excel 2007以后的版本中,数组公式可以处理整列引用,但是这会强制计算列中的所有单元格,包括空单元格。这样会使表格计算起来很缓慢。
4. 尽可能使用最有效的函数(一般情况下自定义函数慢于 Excel 中的内置函数),编制适当的公式,尽可能减少公式的计算次数
=IF(ISERROR(VLOOKUP("龙逸凡",$A$2:$C$1000,3,0)),"查无此人",VLOOKUP("龙逸凡",$A$2:$C$1000,3,0))
如果表格A2:A1000中有“龙逸凡”, 使用上面这个公式,则 Excel 要运算VLOOKUP函数两次。Excel 2007以后的版本中,可以使用 IFERROR 来减少运算的次数:
=IFERROR(VLOOKUP("龙逸凡",$A$2:$C$1000,3,0)," 查无此人")
五、 非必要的情况下不使用会触发重新计算的操作
以下操作会触发重新计算:
1. 在自动模式下单:击行或列分隔符。
2. 在工作表中插入或删除行、列或单元格。
3. 添加、更改或删除已定义名称。
4. 在自动模式下重命名工作表或更改工作表位置。
5. 在表格中使用筛选、隐藏或取消隐藏行。
6. 在自动模式下打开工作簿。如果工作簿上次由不同版本的 Excel 计算,则打开工作簿通常导致完整计算。
7. 选中了“保存前自动重算”选项的情况下在手动模式下保存工作簿。
六、 可能的情况下先对数据进行排序,再使用查找引用。尽可能避免对未排序数据执行查找,因为速度很慢。
1. 如果使用完全匹配选项,则函数的计算时间与找到匹配项之前扫描的单元格数成比例。对于在较大区域内执行的查找,此时间可能非常长。对排序数据使用 VLOOKUP、HLOOKUP 和MATCH 的近似匹配选项的查找时间很短,并且不会根据所查找的区域长度显著增加。
2. 因为完全匹配查找可能很慢,所以应该考虑使用以下可以提高性能的方法:
Ø 使用一张工作表。使查找和数据位于同一工作表中运行速度更快。
Ø 如果可以,请首先对数据进行排序,并使用近似匹配。
Ø 如果必须使用完全匹配查找,请将要扫描的单元格区域限制在最小范围内。使用动态区域名称或表格(列表)功能,而不是引用大量行或列。
七、 做到了前面四点,表格的运算速度还是很慢时,将Excel的计算模式改为手动计算,在需要时再重新计算。
在手动计算模式下,可以通过按 【F9】触发智能重新计算。使用【Shift+F9】 仅重新计算所选工作表,按【Ctrl+Alt+F9】强制对所有公式执行完整计算,也可以通过按【Ctrl+Shift+ Alt+F9】 强制彻底重新构建依赖项和执行完整计算。
F9计算所有打开的工作簿中的所有工作表。
按 Shift+F9 可计算活动工作表。
按 Ctrl+Alt+F9 可计算所有打开的工作簿中的所有工作表,不管它们自上次计算以来是否已更改。
如果按Ctrl+Alt+Shift+F9,则会重新检查相关公式,然后计算所有打开的工作簿中的所有单元格,其中包括未标记为需要计算的单元格。
由于Excel引用访问本工作表、不同工作簿或工作表数据的速度是有区别的,通常计算指向其他工作表的引用比计算工作表内的引用速度要慢。当数据计算量较大时,就必须考虑数据的整体布局:数据是分工作簿保存、分工作表保存,还是保存在同一工作表。
基于整体性原则,如果是清单型数据表格,可能的话,尽量将数据整合同一工作表,至少尽量在同一工作簿。如果不能整合在同一工作簿,宁愿使用少量的大型工作簿,也不要使用数量较多的小型工作簿。尽可能地避免工作簿间的链接,对外部工作簿进行链接,既影响表格的打开速度,并且当工作簿移动或删除时,还容易出现断链,不易于查找和修复。
二、不可避免引用其他工作簿时的提速技巧
对关闭的工作簿尽量使用简单的直接单元格引用。这样做可以避免在重新计算任何工作簿时重新计算所有链接的工作簿。
如果不能避免使用链接的工作簿,最好将它们全部打开而不是关闭,并且表格打开顺序也有讲究,要首先打开要链接到的工作簿,然后再打开包含链接的工作簿。一般来说,从打开的工作簿比从关闭的工作簿中读取链接的速度要快。
进一步提速的“断舍离”大法:
断:数据量大的表格,应将已经计算出结果且不会再更新的单元格的公式计算结果采用选择性粘贴方式转化为数值,以减少计算量;
舍:尽量不要大范围使用计算量大的功能或公式。比如:尽管条件格式和数据有效性的功能非常强大,数组公式运算功能也非常强大,但是,大量使用它们会明显降低计算速度,除非你愿意忍受蜗牛般的运算速度,否则,不要大范围使用数据有效性、条件格式和数组公式;
离:如果某张工作表需要进行大量运算,且其他工作表对它的引用较少,可考虑将其移出本工作簿。以免每次重新计算时,影响工作簿的整体计算速度。
三、 原始数据要规范
原始数据一定的规范,否则,还要使用函数公式清洗不规范的数据,徒增中间环节,影响计算速度。比如数据的来源不是手工输入,而是从其他系统导出,导出的数据可能并不规范,比如数字是文本格式、数字后有空格、不可见字符,这些数据就没法直接参与运算,如果不手工整理成规范数据,还得用函数公式进行规避,这就大大影响计算速度。
四、 要关注公式函数的计算效率,尽量使用效率高的函数,或使用其他功能代替。
1. 非必要的情况下,不使用可变函数(易失性函数)。
Excel的可变函数有:RAND、NOW、TODAY、OFFSET、CELL、INDIRECT和 INFO。可变函数有个特点,当数值发生变化时,每次都要重新计算,因而会影响表格的计算性能。
比如,我们常用的下面的公式来定义动态区域:
=OFFSET(Sheet1!$A$1,0,0,COUNTA(Sheet1!$A:$A),1)
它的好处是:会自动扩展以包含新条目,但表格的计算性能会降低,这是因为 OFFSET 是可变函数,并且由于 OFFSET 中的 COUNTA 函数必须检查很多行,计算效率较低。
一般情况下,我们可以使用Excel的表格功能来代替动态区域(Excel 2003中称为列表)。
2. 使用其他行和列计算并存储中间结果一次,以便在其他公式中重复使用它们。并且,如前所述,尽可能引用其他单元格已有的计算结果,这样可提高运算效率。
在C2单元格输入公式:
=SUM($A$2:$A2)
然后向下填充公式到 C2000。如上图。B列的公式是上一累加结果加上本行数字。B列的公式是引用了上一行单元格的计算结果,B列公式比C列公式单元格引用总数减少了 500 倍,计算量大大减少。
3. 减少每个公式中的引用数,最大程度地减少函数中的引用单元格范围。
尽管在 Excel 2007以后的版本中,数组公式可以处理整列引用,但是这会强制计算列中的所有单元格,包括空单元格。这样会使表格计算起来很缓慢。
4. 尽可能使用最有效的函数(一般情况下自定义函数慢于 Excel 中的内置函数),编制适当的公式,尽可能减少公式的计算次数
=IF(ISERROR(VLOOKUP("龙逸凡",$A$2:$C$1000,3,0)),"查无此人",VLOOKUP("龙逸凡",$A$2:$C$1000,3,0))
如果表格A2:A1000中有“龙逸凡”, 使用上面这个公式,则 Excel 要运算VLOOKUP函数两次。Excel 2007以后的版本中,可以使用 IFERROR 来减少运算的次数:
=IFERROR(VLOOKUP("龙逸凡",$A$2:$C$1000,3,0)," 查无此人")
五、 非必要的情况下不使用会触发重新计算的操作
以下操作会触发重新计算:
1. 在自动模式下单:击行或列分隔符。
2. 在工作表中插入或删除行、列或单元格。
3. 添加、更改或删除已定义名称。
4. 在自动模式下重命名工作表或更改工作表位置。
5. 在表格中使用筛选、隐藏或取消隐藏行。
6. 在自动模式下打开工作簿。如果工作簿上次由不同版本的 Excel 计算,则打开工作簿通常导致完整计算。
7. 选中了“保存前自动重算”选项的情况下在手动模式下保存工作簿。
六、 可能的情况下先对数据进行排序,再使用查找引用。尽可能避免对未排序数据执行查找,因为速度很慢。
1. 如果使用完全匹配选项,则函数的计算时间与找到匹配项之前扫描的单元格数成比例。对于在较大区域内执行的查找,此时间可能非常长。对排序数据使用 VLOOKUP、HLOOKUP 和MATCH 的近似匹配选项的查找时间很短,并且不会根据所查找的区域长度显著增加。
2. 因为完全匹配查找可能很慢,所以应该考虑使用以下可以提高性能的方法:
Ø 使用一张工作表。使查找和数据位于同一工作表中运行速度更快。
Ø 如果可以,请首先对数据进行排序,并使用近似匹配。
Ø 如果必须使用完全匹配查找,请将要扫描的单元格区域限制在最小范围内。使用动态区域名称或表格(列表)功能,而不是引用大量行或列。
七、 做到了前面四点,表格的运算速度还是很慢时,将Excel的计算模式改为手动计算,在需要时再重新计算。
在手动计算模式下,可以通过按 【F9】触发智能重新计算。使用【Shift+F9】 仅重新计算所选工作表,按【Ctrl+Alt+F9】强制对所有公式执行完整计算,也可以通过按【Ctrl+Shift+ Alt+F9】 强制彻底重新构建依赖项和执行完整计算。
F9计算所有打开的工作簿中的所有工作表。
按 Shift+F9 可计算活动工作表。
按 Ctrl+Alt+F9 可计算所有打开的工作簿中的所有工作表,不管它们自上次计算以来是否已更改。
如果按Ctrl+Alt+Shift+F9,则会重新检查相关公式,然后计算所有打开的工作簿中的所有单元格,其中包括未标记为需要计算的单元格。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询