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执行速度慢,这些建议你一定要看的更多相关文章

  1. 2017-5-29 Excel VBA 小游戏

    ---恢复内容开始--- 转一个Excel VBA的小游戏,最近对excel有了更深入的了解,功能很强大,也刷新了我对待事情的态度. 一.准备界面 我们先来把游戏界面准备好,选中前4行,行高调成50, ...

  2. Excel VBA(宏):添加宏

    写在前面: .编写宏,打开VBA,双击ThisWorkbook对当前工作薄进行编写宏:双击Sheet1,对整个sheet编写宏: 或者创建模块,在模块里,编写.调试代码. 打开VBA的方法见第一讲,结 ...

  3. Excel VBA入门(六)过程和函数

    前面讲过,VBA代码有两种组织形式,一种就是过程(前面的示例中都在使用),另一种就是函数.其实过程和函数有很多相同之处,除了使用的关键字不同之外,还有不同的是: 函数有返回值,过程没有 函数可以在Ex ...

  4. Excel VBA入门(五)Excel对象操作

    本章是本系列教程的重点.但我觉得应该不是难点.从第零章开始到学完本章,应该可以把VBA用于实战中了. Excel对象主要有4个: 工作薄 Workbook 工作表 Worksheet 单元格区域 Ra ...

  5. 如何调试Excel VBA代码

    Excel VBA出错时给出的错误信息极少,需要充分利用各种工具来进行调试. 1.编译错误 常见的编译错误有: 错误的源代码格式,比如if后面缺少then:在编辑器中该行会变成红色. 错误的语法结构, ...

  6. Excel VBA 连接各种数据库(三) VBA连接SQL Server数据库

    本文主要涉及: VBA中的SQL Server环境配置 VBA连接SQL Server数据库 VBA读写SQL Server数据 如何安装SQL Client 系统环境: Windows 7 64bi ...

  7. 在Excel VBA中使用SQL到底优势在哪儿

    小爬在之前的博文中多次提到,可以在VBA中写SQL来操作Excel文件,实现各类数据处理和分析需求.那么,你可能有这样的疑问:Excel原生的VBA,数据透视表,数据分析功能不够吗,为啥一定要用SQL ...

  8. 来吧!带你玩转 Excel VBA

    来吧!带你玩转 Excel VBA 从错失良机到艰辛的DOS征程,从坎坷购机自学路到转机起程,从爱好到事业,他从一个完全不懂电脑的人到VBA高级应用者,一切全是自学…… 我是罗刚君,来自四川的一个小县 ...

  9. C#调用Excel VBA宏

    近日的一系列工作是做网站的营运维护,因此做了大量的支持工具.有Excel中写VBA的,也有直接C#做的工具.有时需要在C#中执行Excel VBA宏,甚至有时还需要在执行了VBA宏之后,获取返回值再进 ...

随机推荐

  1. 攻防世界 pwn welpwn

    感觉好久没有水博客了,今天借助这道题来告诉自己做pwn题要多调试!!! 先检查了保护只开启了堆栈不可执行,接下来ida看一下伪代码: 这里可以往buf进行写入,接下来看一下echo函数: 大概意思就是 ...

  2. Notepad++ 常用功能:批量取消替换换行、强制刷新数据

    批量取消替换换行 换行批量替换成空格 Ctrl+F 打开查找替换窗口,使用:\r\n 替换成 空格,全部替换 强制刷新数据源,重新加载数据 快捷键:Ctrl+R 或者 Alt+F 然后 L 或者点击菜 ...

  3. 金山云主机centos7.4根目录挂载文件书写错误无法进入系统解决办法

    由于/etc/fstab写错,根目录无法挂载,开机提示如下 处理办法: 根据提示输入root密码: 执行mount -o remount,rw /重新挂载根目录. vim 修改挂载文件 reboot重 ...

  4. SpringBoot 整合Spring Security框架

    引入maven依赖 <!-- 放入spring security依赖 --> <dependency> <groupId>org.springframework.b ...

  5. vc++ 调用winapi调节屏幕亮度(增加win7代码demo)

    1.关于 代码是通过测试的,测试环境: win7 + MFC 为什么要发在这里? 区别于上一篇随笔. MD排版更顺眼 demo 会放到 这里 更正了上一篇随笔中的代码错误 2.头文件 #include ...

  6. 【LeetCode】553. Optimal Division 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  7. 【LeetCode】116. 填充每个节点的下一个右侧节点指针 Populating Next Right Pointers in Each Node 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归 日期 题目地址:https://leetcode ...

  8. 【LeetCode】95. Unique Binary Search Trees II 解题报告(Python)

    [LeetCode]95. Unique Binary Search Trees II 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzh ...

  9. [Kaiming]Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification

    目录 概 主要内容 PReLU Kaiming 初始化 Forward case Backward case He K, Zhang X, Ren S, et al. Delving Deep int ...

  10. 代码质量管理sonarqube部署使用

    一.sonarqube的部署 1.下载sonaqube:https://www.sonarqube.org/downloads/ 根据需要下载特定版本: 2.如果通过sonar-scanner进行代码 ...