Excel表格为什么那么慢以及怎么解决(一)
我们对Excel的直观感受就是公式一多,Excel计算速度就会很慢。但是实际上并不是这样的。Excel中很多公式并不必然导致计算速度变慢,让计算速度变慢的原因是你对公式的选择以及公式的写法。
速度分析工具
很简单,选中一个区域,点击上方的“开始分析”,就会得到一个计算时间,时间是以秒为单位显示的。
我们这一系列文章都是基于这个工具进行的。这个工具是用VBA写的,你可以通过下面的方式获得这个工具:
关注本公众号:ExcelEasy
回复:计算速度分析工具
还需要强调的是,这个计算速度依赖于你的计算机的速度。这一系列文章及案例是在我的笔记本上完成的,配置如下:
计算速度慢的简要分析
我们有一个表格记录了销量,总共5000条。D列记录了滚动销量,这个滚动销量的计算是通过公式:
=SUM($C$6:C6)
这是一个很简单的公式,单元格引用也是一个经常用到的技巧,我们来分析一下,看看5000条公式运行耗时多少呢。我们选中D列数据,然后点击“开始分析”,得到了结果:
耗时0.1秒!你可能觉得还不到1秒呢。其实已经很慢了。因为这只是一个简单的公式,如果表格中还有其他公式的话,速度很容易就超过1秒(对于一般的表来说,这就是个很慢的速度了)。
而且,随着你的数据量增多,这个数字并不是线性的。比如,如果我们的数据增加一倍至10000行(在表格下面重新粘贴一遍即可),我们得到的计算速度是:
并没有从0.1增加1倍到0.2,而是原来的四倍:
0.1 * 2的平方=0.4
也就是说随着数据量的增加,这个公式的耗时是指数增加的。这就是一个非常可怕的事情了。
我们可以重新修改一下公式:
将D6的公式改为:
=C6
将D7的公式改为:
=D6+C7
然后将D7的公式向下填充。
很容易就会发现,从计算结果的角度,这两个公式是等价的。那么,计算速度呢:
要记住我们是用了增加一倍数据量后的数据。也就是说速度从0.4变成了0.02:
0.42961/0.02739=15.68
整整15倍的速度差距啊。仅仅是一个公式的修改就产生了15倍的速度差距。
而且后一个公式写法随着数据量的增加速度是线性增加的。比如,如果我们 的数据再增加1倍至2万条(复制粘贴即可):
速度只增加了不到1倍。
这个特性非常好。搞算法研究的都知道,如果你的算法计算速度是线性的,那么恭喜你,找到了一个好的算法。如果你的算法计算速度是指数的,那就赶紧放弃吧。函数也是这样的,请千万使用一个线性的公式啊😀
那么如何找到呢?
计算速度慢的秘密
=SUM(C7,D6)
都是用的SUM函数,但是速度就是会差出10多倍。
这里的关键就在于参与公式计算的单元格个数。
我们来看第一个公式:
=SUM($C$6:C6)
D7单元格,引用$C$6:C7,共2个单元格
D8单元格,引用$C$6:C8,共3个单元格
......
如果我们在10000个单元格使用这个公式,那么共引用多少单元格呢:
D6单元格,引用C6,共1个单元格
D7单元格,引用C7,D6,共2个单元格
D8单元格,引用C8,D7,共2个单元格
......
我们在10000个单元格中使用这个公式,共引用了:
1+2+2+......+2=19999
回归线经验:这确实是个真正的秘密。在进行公式优化时,大部分我们对公式的修改都是基于这个秘密原则进行的,即想法设法减少公式中引用的单元格数量。基于这个原则,我最快的是从长达20分钟的计算耗时降低到了不到1秒钟。
当然还有其他因素影响公式计算速度,在后面的文章中我们会分别给大家介绍。
总结
把计算方式从自动改为手动并不解决速度问题。
很多朋友都知道,我们可以将计算方式从自动改为手动:
网上很多文章也会教你这么做来解决公式速度太慢的作用。
实际上当然不起作用。你只是回避了这个问题,而且会产生如下副作用:
有时,你的很多图表或者报表是依赖于前面的计算结果的。如果前面结果不是实时的,那么这些图表和报表都是不准确的。
如果你的文件发给别人,别人可能忘了把这个选项打开,也不知道需要手动重新计算,就看不到最新结果。
我们设置强烈建议,一定要保持这个选项为“自动”。如果计算速度太慢,就想法设法优化你的公式。具体优化方法我会在后续文章中详细介绍。
取得本文所用文件的方式:
关注本公众号
回复:计算速度分析工具