大家都知道在Office里面可以用VBA进行二次开发,为日常工作提供了一条快捷的途径,善用它,可以大大的改善我们的工作体验和质量。今天跟大家分享的不是VBA本身,而是一些VBA代码常用的优化技巧,大神请绕路(也欢迎指点),VBA初学者或者爱好者可以看看,哪怕是得到一点点启发和借鉴,那也是极好的。
很多时候我们要实现某些功能,如果本身对excel不熟悉的话,可能会想办法去实现某些看上去很复杂的功能,殊不知,其实excel本身已经提供了类似的功能,有的时候可能仅仅是一个函数就解决了的事情,结果你搞半天,说不定辛苦弄出来,结果效率和效果还没内置的好。
也有例外,如:
dim arr(),temp as byte,i,j,tim as long
arr=array(1,7,8,6,9,3,5,7,6,8,9,4,1,2,4) '数组的值
for i=1 to UBound(arr) '循环比较数组中所有元素
next i
end sub
2.尽量减少使用对象引用
用set语句将反复引用的对象设置为对象变量,因为变量存在内存中
sub批注循环()for each com in activeSheet.commentsnextendsubdim rng as range,address as string,bl as boolean
for each rng in activesheet.usedrange
if err=0 then address=address&rng.address(0,0)&chr(10)
next rng
end sub
少用select和activate语句
4.关闭屏幕更新
Application.ScreenUpdating=False '通常放在循环语句前...Application.ScreenUpdating=True
强制变量声明(OptionExplicit):在设置里面勾选,会节省时间,自动带出,而不是自己手动敲出来的
选择合适的变量类型:缺省会默认Variant型,但是会增加内存耗用,能明确的就具体指明
讲到这里,想强调一下,有时候为了效率,有的人喜欢在代码编写的时候采用一些简写或者隐式声明,这个确实会让我们少敲不少字,但是带来的另外一个问题是,一旦代码出现了问题,调试或者找错误的时候就会很抓狂了,可能从整体的时间效率上反而不划算,所以还是建议大家养成良好的编程习惯,变量都写清楚,勤备注,这样易读性和可维护性好
VBA中有2套字符串处理函数,带$和不带$的。
7.善用循环中的步长减少循环次数
讲到循环,还有一个类似的例子:
8.利用数组代替单元格对象
这个应该是应用的最多的,效果是最明显的,少了单元格的交互,会省不少事。
实例:
sub 对小于60分成绩进行注释()
'重置第二个数组变量大小
'循环数组for i=1 to UBound(arr1)
next i
range([c2],cells(rows.count,2).end(xlup).offset(0,1))=arr2
9.重复调用UDF时才使用它
为了程序运行的高效,我们通常会把长代码拆成几个子代码或者自定义函数,来相互调用。达到方便调试和互相引用的目的。UDF适合多次调用时,否则调用的速度甚至比执行的速度更慢。
10.将不改变值或者属性的语句放到循环语句外
11.利用长度计算判断单元格是否为空
xx=""
xx is nothing
range("a1")="" '建议len法,此法效率更高len(range("a1"))=0 '.value省略,range的默认属性
程序运行时间测试代码:
dim tim as long
for ...
msgbox format(timer-tim,"0.00")&"秒" '执行报告时间
通常有2种方法timer函数和time函数,网上很多人问有啥区别,搞不清楚,这里简单解释一下(理解有误的话,望高手不吝赐教):
时间比较长时,可以用time,time是按照时间如22:58:30这样记录的,即运行前后电脑时间相减
更多精彩,敬请关注微信号Excel-365,后续有更新,会及时分享!

