Hi,各位同学好!我是吴明课堂的答疑老师之一陈婉,祝大家一切安好!

作为VBA课程的答疑老师,有个同学问了我一个很值得一写的问题:

准时下班系列!Excel合集之第2集—VBA填充百万行公式,怎么写最快_填充公式

文字总结一下问题:这位同学的表格有15万行数据,使用VBA循环给表格添加公式,程序执行时Excel软件会卡住很久。

我提供了两种解决思路:

1. 循环前将Excel计算模式改成手动计算  

准时下班系列!Excel合集之第2集—VBA填充百万行公式,怎么写最快_VBA_02

2. 放弃循环填充方式,改用公式自动填充方式实现

准时下班系列!Excel合集之第2集—VBA填充百万行公式,怎么写最快_执行效率_03

接下来用实际案例来测试各种优化方案的执行效率:

  • 首先测一下最简单直白的循环实现方案

准时下班系列!Excel合集之第2集—VBA填充百万行公式,怎么写最快_Excel_04

如上图所示:自动计算模式下使用循环填充15万行SUM求和公式,耗时4m56s;


  • 然后测试添加手动计算模式的循环实现方案能否加快速度

准时下班系列!Excel合集之第2集—VBA填充百万行公式,怎么写最快_Excel_05

如上图所示:手动计算模式下使用循环填充15万行SUM求和公式,耗时12s,比不加的时候快了25倍;


再测一下自动填充公式方案耗时

准时下班系列!Excel合集之第2集—VBA填充百万行公式,怎么写最快_VBA_06

如上图所示:自动计算模式下使用自动填充公式方式填充100万行数据(15万行耗时不足1s,所以扩大了数量级),耗时2s,比上一种又快了几十倍;


  • 最后为自动填充公式方案添加手动计算模式

准时下班系列!Excel合集之第2集—VBA填充百万行公式,怎么写最快_填充公式_07

如上图所示:手动计算模式下使用自动填充公式方式填充100万行数据,耗时2s,跟上一种方案速度一致,可以推测Excel的自动填充算法本身就采用了手动计算模式。


对于公式自动填充方案,这位同学提出了其局限性:

准时下班系列!Excel合集之第2集—VBA填充百万行公式,怎么写最快_百万级_08


这个问题很好解决,方案有如下二种:

  • 修改公式使其能适应多种条件,如下图:

准时下班系列!Excel合集之第2集—VBA填充百万行公式,怎么写最快_Excel_09

  • 筛选不同条件的单元格分别填充不同公式,如下图:

准时下班系列!Excel合集之第2集—VBA填充百万行公式,怎么写最快_百万级_10

从测试结果看来,最优方案就是先写一个所有行通用的公式,然后使用公式自动填充所有行,百万级数量的单元格填充只需2秒(不同机器和环境数据会有波动)。

难点分析:

  • VBA是微软在软件已有功能之外开放的供用户开发自定义功能的编程语言,首先要学好Excel基础功能,才能发挥VBA应有的价值。
  • 比如以本文中分析的问题,用户需要了解不同计算模式是什么,有什么差别,单元格填充公式除了使用循环,还可以自动填充公式。
  • 当一列的公式不一致时,可以使用函数嵌套,使公式能满足不同条件;筛选后的单元格也可以单独填充公式而不影响其它不符合条件的单元格。


如需系统学习Excel,可查看以下课程:

​https://edu.51cto.com/course/26293.html​

该课程可以使学员以最少的学习时间搭建最完善的表格基础知识架构。


案例文档下载链接​https://pan.baidu.com/s/1fClmG9ddYkCGnAFydAihIg​

提取码:wmkt

如果我分享的这个案例对同学有帮助,就点个赞吧。予人玫瑰,手有余香。 祝大家一切顺利,身体健康!