vba 判断目标单元格内容改变的代码_Excel VBA代码优化,别怕,这个功能只需要2分钟搞定...

相信在很多的时候,你辛辛苦苦积累写下来的代码,运行速度并不是那么的完美,也就是说执行的效率低。那么你是否知道为什么你写的代码就运行这么慢呢?原因在哪?且听我慢慢给你道来,只要你做到以下说的几点,相信你的代码运行效率会提升80%以上。

84dd1dda175a556b120e7493dd3d92a5.png

关闭屏幕刷新功能

当你写的代码其中有改变工作表的显示内容或格式时,因为这个时候随着程序的执行,电脑的屏幕需要不断改变内容的显示,就是不停止的执行刷新页面,那么在这个时候关闭屏幕刷新可以明显加快运行速度,如下面的代码所示。

d541a91d20041ccb3bcb205324ded53f.png

以上代码过程中使用两次For...Next语句给A1单元格填充数据,最后使用Msgobx显示两次运行的时间对比,如下所示。我们可以看到在第一次循环时关闭屏幕刷新(Application.ScreenUpdating = False),将看不到代码的执行过程,其实程序在不停的执行当中,只是我们看不到而已,但可以提升代码的执行速度。如下图所示的消息框显示两次代码的运行时间,可以看出关闭屏幕刷新后运行时间远远小于开启屏幕刷新时运行的时间,也就是说我们关闭屏幕刷新,可以明显提升速度。

03a42f2f71d2c5947b501fa7c0cc4c17.png

使用工作表函数

相信有时候我们用VBA处理数据的时候,经常会遇到需要自己写函数,或者你有没有想过其实可以直接引用工作表函数,在VBA中使用工作表函数比仅仅使用VBA代码的运行时间要快得多,我们看看如下的例子吧!

08cd4ca523ead87f951073ebefb1a898.png

这个代码的过程分别使用VBA代码进行累计加法和直接调用工作表Sum函数对单元格区域进行求和计算,最后使用消息显示运行时间对比。Cells(1, 2) = Cells(1, 2) + Cells(i, 1),这是利用循环和累加,也就是k=k+1进行累加求A1:A30000和;而Cells(2, 2) = Application.WorksheetFunction.Sum(Range("A1:A30000"))的意思就是直接利用工作表函数SUM进行求和。

程序执行的结果对比如下所示,其实您明显发现使用工作表函数的速度明显小于我们使用代码的速度。

15aa537c896038b6809e1ab9c3585c68.png

使用更快更好的单元格操作方法

在某些时候我们需要对单元格区域进行操作时,在这个时候也许你会选择使用Find、Replace、SpecialCells等方法可以比使用VBA代码获得更快的速度,如下面的代码所示:

b26132310a7ccfd11c7cbb321e56a6ad.png

在这个过程分别使用VBA代码和使用Replace、SpecialCells方法删除工作表A列内容为“Excel”的单元格所在的行,

MSgbox显示两种方法的运行时间,可以看出使用Replace方法和SpecialCells方法的运行时间要远远小于使用VBA代码运行的时间,如下图所示,所以说我们在选择某些操作表格的方法时候,需要注意一下使用的方法。

2928136d59397e333e057e859ffce86b.png

With语句使用

我们在上面的例子看到我们其实已经在使用这个语句结构了,也就是说我们在遇到需要重复引用同一个对象时可以使用With语句来获得较快的运行速度,如下面的代码所示:

f4aa1cd1a4adb5f4fd7d34bf2389cf16.png

在这个代码过程在数据填充的时候填充时使用With-End with语句来引用工作表对象,从而让代码获得较快的运行速度。

需要注意的是我们的With语句在一个单一对象或一个用户定义类型上执行一系列的语句,他的用法如下:

With Object

[statements]

End With

其中参数object是必需的,一个对象或用集合对象;参数statements是要执行的一条或多条语句。With语句可以对某个对象执行一系列的语句,而不用重复指出对象的名称。在运行时只需引用对象一次而不是在每个属性赋值时都要引用,从而获得较快的运行速度。如下显示两种方法的运行时间,可以看出使用With语句来引用工作表对象的运行速度和没有使用引用的速度相差几百倍,所以在能使用对象引用的就尽量使用,这样可以明显加快程序的执行速度。

593161e28ba6c9e7e4654e858b1bd663.png

减少使用激活或者选择语句

为啥要是这个减少激活或者选择语句呢?因为我们在录制宏的时候,可以看到其实录制的代码中存在非常多的这样的语句,但是这些语句是可有可无的,因为他们的存在明显拖累了我们执行速度。请看如下代码所示:

d6bcb51255ac21768d22b32589913be6.png

在这代码的过程分别使用录制宏所得的代码,其中包含了激活、选择单元格、工作表,后面是我们修改后的代码给单元格填充,消息框显示两种方法的运行时间,可以看出后一种方法的运行时间要远远小于录制宏所得的代码的运行时间,如下所示。

104bd6fd5a39609306e4740bbdf39326.png

以上就是我们今天要和你说的我们常用的几种加快代码执行速度的方法,当然还有其他的方法,我们会在下期一一介绍,每天一个小知识点,你会进步一大步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值