嫌Excel VBA执行速度慢,这些建议你一定要看
Excel是办公利器,这无需多言。尤其在办公室,Excel用的熟练与否,会的Excel知识点多不多,很大程度上决定了你工作是否高效,能否按时打卡下班。可我们也时常听到这样的吐槽:Excel好是好,可就是表格大了之后,公式多了之后,它运算起来忒慢了。
我们写VBA宏,除了要实现特定的自动化功能,还肩负一个极其重要的使命:让Excel快起来~那么如何优化我们的VBA代码,给Excel宏提速呢?
方法一:启用【手动计算】
我们都知道【公式】菜单栏有【计算选项】,可以选择【自动计算】、【手动计算】,一般Excel默认是自动计算。如果我们的工具是VBA+Excel公式结合,那么VBA每执行一行,更改了某些单元格值,则整个Excel都会自动计算一遍公式。我们完全可以在VBA代码开始时先切换到【手动计算】,等VBA主体执行完后,再切换到【自动计算】,减少过程中不必要的计算开销。

具体到代码层面,写起来也是非常简便:
Application.Calculation = xlManual '手动
'在【手动】状态下,需要点击【开始计算】来触发excel计算公式
Application.Calculate '开始计算
Application.Calculation = xlAutomatic '自动计算
方法二:关掉Excel窗口的刷新功能
当我们的VBA代码飞速执行时,伴随着单元格值在不停变化,Excel界面也在快速计算和刷新着,这都会拖慢VBA的执行速度,因此大多数情况下,我们可以选择关掉页面的刷新,执行完不要忘记恢复它的刷新功能,代码如下:
Application.ScreenUpdating = False '关掉屏幕刷新
Application.ScreenUpdating = True '重新启用屏幕的刷新功能
方法三:代码中少用Excel公式,擅用字典
很多刚开始写VBA的人,由于对语法还不是很熟悉,这类人更倾向于在脚本里大量调用EXCEL基本的公式,如application.WorksheetFunction.VLookup(),这样可以显著提升脚本的开发效率,本是无可厚非的事儿。随着我们对VBA原生语法和数据类型越来越熟悉,不妨把Vlookup、Hlookup等函数,替换为用VBA字典实现。它语法更灵活,可以轻松实现表格从右往左的反向查找。因为字典这类数据结构(Key,Value)查询要比Vlookup等公式的匹配速度快很多。
方法三:把Excel文件当数据库来访问
把每个工作表看作是数据库表,用SQL查询来提升VBA速度。VBA中使用SQL(结构化查询语言(Structured Query Language))连接某个Excel数据源(DataSource),可以隐式连接,而无需像workbooks.open那样显示加载打开的表,对代码速度的提升显而易见。使用SQL来过滤、筛选、条件判断、分组、求最值等,更是可以让VBA速度快到起飞,数据透视表都瞬间变得不香了。唯一的缺点,SQL的学习成本比VBA和公式还是要稍高些,间接拉高了学习门槛。但话又说回来,真正会写SQL之后,你会发现以前一些略显复杂的需求瞬间变得SO EASY。大胆去学吧,相信你绝不会后悔!
改进了VBA代码中这些细节后,你会发现,VBA原来可以这么快!

后续的随笔中,小爬会带大家一起认识SQL,解锁更多数据分析的技能,共同领略VBA+SQL的威力~
快来扫码关注我的公众号 获取更多爬虫、数据分析的知识!

嫌Excel VBA执行速度慢,这些建议你一定要看的更多相关文章
- 2017-5-29 Excel VBA 小游戏
---恢复内容开始--- 转一个Excel VBA的小游戏,最近对excel有了更深入的了解,功能很强大,也刷新了我对待事情的态度. 一.准备界面 我们先来把游戏界面准备好,选中前4行,行高调成50, ...
- Excel VBA(宏):添加宏
写在前面: .编写宏,打开VBA,双击ThisWorkbook对当前工作薄进行编写宏:双击Sheet1,对整个sheet编写宏: 或者创建模块,在模块里,编写.调试代码. 打开VBA的方法见第一讲,结 ...
- Excel VBA入门(六)过程和函数
前面讲过,VBA代码有两种组织形式,一种就是过程(前面的示例中都在使用),另一种就是函数.其实过程和函数有很多相同之处,除了使用的关键字不同之外,还有不同的是: 函数有返回值,过程没有 函数可以在Ex ...
- Excel VBA入门(五)Excel对象操作
本章是本系列教程的重点.但我觉得应该不是难点.从第零章开始到学完本章,应该可以把VBA用于实战中了. Excel对象主要有4个: 工作薄 Workbook 工作表 Worksheet 单元格区域 Ra ...
- 如何调试Excel VBA代码
Excel VBA出错时给出的错误信息极少,需要充分利用各种工具来进行调试. 1.编译错误 常见的编译错误有: 错误的源代码格式,比如if后面缺少then:在编辑器中该行会变成红色. 错误的语法结构, ...
- Excel VBA 连接各种数据库(三) VBA连接SQL Server数据库
本文主要涉及: VBA中的SQL Server环境配置 VBA连接SQL Server数据库 VBA读写SQL Server数据 如何安装SQL Client 系统环境: Windows 7 64bi ...
- 在Excel VBA中使用SQL到底优势在哪儿
小爬在之前的博文中多次提到,可以在VBA中写SQL来操作Excel文件,实现各类数据处理和分析需求.那么,你可能有这样的疑问:Excel原生的VBA,数据透视表,数据分析功能不够吗,为啥一定要用SQL ...
- 来吧!带你玩转 Excel VBA
来吧!带你玩转 Excel VBA 从错失良机到艰辛的DOS征程,从坎坷购机自学路到转机起程,从爱好到事业,他从一个完全不懂电脑的人到VBA高级应用者,一切全是自学…… 我是罗刚君,来自四川的一个小县 ...
- C#调用Excel VBA宏
近日的一系列工作是做网站的营运维护,因此做了大量的支持工具.有Excel中写VBA的,也有直接C#做的工具.有时需要在C#中执行Excel VBA宏,甚至有时还需要在执行了VBA宏之后,获取返回值再进 ...
随机推荐
- UCI数据库_鸢尾花数据集的读取方式
1. 读取数据的第一种方式 [attrib1,attrib2,attrib3,attrb4,class] = textread('iris.data','%f%f%f%f%s','delimiter' ...
- secret_file
拿到题目例行检查,进入main函数 这个逆向有些复杂,程序首先让我们像dest输入256个字符,我们可以看到关键的strcmp(v15,v17),若相等则执行poppen poppen这个函数有额外的 ...
- BUU | pwnable_orw
题解网上其他师傅已经写过了而且写的很详细,菜鸡只好写一下自己做题中的笔记 Payload : #coding:utf-8 from pwn import * context(log_level = ' ...
- 2、动态规划接替套路框架——Go语言版
前情提示:Go语言学习者.本文参考https://labuladong.gitee.io/algo,代码自己参考抒写,若有不妥之处,感谢指正 关于golang算法文章,为了便于下载和整理,都已开源放在 ...
- CF1006B Polycarp's Practice 题解
Content 给定一个长度为 \(n\) 的数列,试将其分成 \(k\) 段,使得每一段中的最大值的和最大. 数据范围:\(1\leqslant k,n,a_i\leqslant 2000\). S ...
- SpringBoot使用@Async实现异步调用
1.@EnableAsync 首先,我们需要在启动类上添加 @EnableAsync 注解来声明开启异步方法. @SpringBootApplication @EnableAsync public ...
- java源码——对文件内容的查找和替换(开始写界面咯)
问题是:"键盘输入文件的路径.查找内容和替换内容,对指定路径的文件的内容进行查找和替换." 好久没写界面了,今天熟悉一下界面的书写和监听器操作. 这个问题的本身不是很难,重点应该是 ...
- 【LeetCode】872. Leaf-Similar Trees 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 中序遍历 先序遍历 后序遍历 日期 题目地址:htt ...
- .Net Core 3.1 WebApi使用Swagger生成Api文档
用swagger生成Api文档 1.安装Swashbuckle.AspNetCore 右键单击"解决方案资源管理器" > "管理 NuGet 包"中的项目 ...
- 使用.NET 6开发TodoList应用(16)——实现查询排序
系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求 关于查询的另一个需求是要根据前端请求的排序字段进行对结果相应的排序. 目标 实现根据排序要求返回排序后的结果 原理与思路 要实 ...