ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 52824|回复: 17

[分享] 经验分享:如何才能让EXCEL计算速度更快?跑起来嗖嗖的

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-1-24 22:59 | 显示全部楼层 |阅读模式
注:
本文为本人在知乎的一个回答,特分享给大家。

------------

本打算关电脑睡觉,就因为打开知乎多看了一眼,让我瞌睡少睡了二个小时。为了回答这个问题,我将本人新出版的《“偷懒”的技术:打造财务Excel达人》第一章使用Excel的理念心法的内容,结合搜集到的资料,补充完善,修订成本答案,尽量体系化、学术化,以符合知乎的专业精神。希望对你有帮助。
当表格的计算效率较低时,可考虑从以下方面进行优化:
一、     首先要合理设计数据的布局,这是计算效率得到保障的前提
由于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.    使用其他行和列计算并存储中间结果一次,以便在其他公式中重复使用它们。并且,如前所述,尽可能引用其他单元格已有的计算结果,这样可提高运算效率。
11.png
在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,则会重新检查相关公式,然后计算所有打开的工作簿中的所有单元格,其中包括未标记为需要计算的单元格。

评分

6

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-1-25 10:37 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-4-29 18:12 | 显示全部楼层
不知道要写什么评价才能表达此刻的情绪,感觉很强悍的样子!

TA的精华主题

TA的得分主题

发表于 2015-8-8 11:55 | 显示全部楼层
感谢楼主分享,楼主辛苦了!!{:soso_e100:}

TA的精华主题

TA的得分主题

发表于 2015-8-8 17:03 | 显示全部楼层
三“实”:实在、实效、实用

TA的精华主题

TA的得分主题

发表于 2015-9-3 08:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
话不多说 就一个字  好

TA的精华主题

TA的得分主题

发表于 2015-9-9 08:48 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-11-12 11:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
受益受益!{:soso_e163:}

TA的精华主题

TA的得分主题

发表于 2015-11-12 12:32 | 显示全部楼层
学习函数,有些表单用后运行很慢,可借鉴避免,谢谢!

TA的精华主题

TA的得分主题

发表于 2015-12-11 10:41 | 显示全部楼层
找了好半天,楼主给出了excel优化的总体思路,有拨开雨雾见日月的感觉,多谢~
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-28 08:46 , Processed in 0.055498 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表