嫌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宏之后,获取返回值再进 ...
随机推荐
- 【分布式技术专题】「OSS中间件系列」Minio的文件服务的存储模型及整合Java客户端访问的实战指南
Minio的元数据 数据存储 MinIO对象存储系统没有元数据数据库,所有的操作都是对象级别的粒度的,这种做法的优势是: 个别对象的失效,不会溢出为更大级别的系统失效. 便于实现"强一致性& ...
- 联盛德 HLK-W806 (九): 软件SPI和硬件SPI驱动ST7789V液晶LCD
目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...
- 筛选Table.SelectRows-文本与数值(Power Query 之 M 语言)
数据源: 包含文本与数值的任意数据 目标: 对文本和数值进行筛选 M公式: = Table.SelectRows( 表, 筛选条件) 筛选条件: 等于:each [指定列] = "指定值&q ...
- LuoguB2035 判断数正负 题解
Content 给定一个数 \(n\),判断这个数的正负. 数据范围:\(-10^9\leqslant n\leqslant 10^9\). Solution 一个基础的分支结构题. if-else ...
- java 数据类型:ArrayList;LinkList性能分析
各种线性表的性能分析. java提供的List就是一个线性表接口,ArrayList和LinkedList是线性表的两种实现.基于数组的线性表和基于链表的线性表. 一般来说,我们无需理会ArrayLi ...
- react Input 表单
input react 表单 input 密码框在谷歌浏览器下 会有黄色填充 官网的不太用,这个比较好用 type="password" autoComplete=" ...
- JAVA微信支付——微信公众号内支付 代码
官方文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1 微信PC二维码支付方式参考:https://www.cnblogs. ...
- 【LeetCode】115. Distinct Subsequences 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 动态规划 日期 题目地址:https://leetc ...
- Fence(poj1821)
Fence Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 4705 Accepted: 1489 Description ...
- 网易云 微专业C++系统工程师
网易云 微专业C++系统工程师 一.学前基础 1.曾经学过某种编程语言(C语言最佳) 2.了解基本的变量.类型.作用域.循环和控制流程:了解基本数据类型(整数.浮点.字符串.数组等) 3.知道如何编译 ...