
大家好,我们今日继续讲解VBA代码解决方案的第86讲内容:VBA代码的优化篇,使用工作表函数要比代码计算快很多。在代码的优化的上一篇中我讲到了关闭屏幕更新可以有效的节约程序的运行时间,那么是不不是必须要关闭屏幕更新以得到更好的运行效率呢?根据我的经验不是这样的。在有的时候我们还是需要看到屏幕的更新而获得一种动态的程序运行效果的,也就是说我们在获得节约时间的时候往往会牺牲视觉效果。这就要看看程序员的选择和好恶了。今日我们讲在VBA中使用工作表函数比仅仅使用VBA代码的运行时间的比较。
如下面的代码所示。
Sub MyShFunction()
Dim i
Dim t As Date
Dim t1 As String
Dim t2 As String
Range("B1:B4").ClearContents
Application.ScreenUpdating = False
t = Timer
For i = 1 To 60000
Sheets("sheet10").Cells(1, 2) = Sheets("sheet10").Cells(1, 2) + Sheets("sheet10").Cells(i, 1)
Next
t1 = Timer - t
t = Timer
Sheets("sheet10").Cells(2, 2) = Application.WorksheetFunction.Sum(Sheets("sheet10").Range("A1:A60000"))
t2 = Timer - t
Application.ScreenUpdating = True
Sheets("sheet10").Cells(3, 2) = Format(t1, "0.00000")
Sheets("sheet10").Cells(4, 2) = Format(t2, "0.00000")
MsgBox "第一次运行时间:" & Format(t1, "0.00000") & "秒" _
& Chr(13) & "第二次运行时间:" & Format(t2, "0.00000") & "秒"
End Sub
代码解析:
MyShFunction过程分别使用VBA代码和调用工作表Sum函数对单元格区域进行求和计算,最后使用消息显示运行时间。
第9行到第11行代码使用VBA的累加方法计算单元格A1:A60000的和。
第14行代码调用工作表Sum函数计算单元格A1:A60000的和。
运行ShFunction过程,消息框显示两种方法的运行时间,可以看出调用工作表函数进行计算的运行时间要远远小于使用累加方法运行的时间,
代码窗口:


今日内容回向:
1 本讲讲的第二种优化代码的方案是什么?
2 工作表函数如何引用呢?
欢迎到我的自媒体平台沟通交流:个人微信号“NZ9668”、头条号“VBA专家”、百家号“VBA与GO语言”、微信公众号“NZ_9668”、社群“VBA学习交流群”。
这一系列文章是根据我多年的工作经验编写的,也是一直在利用的工具,非常方便好用。现在分享出来,希望能对同样在职场打拼的朋友有些许的帮助,使你的工作更加高效、流畅。朋友们有问题请随时提出来,我们一起探讨学习。对数据分析有需要的公司、组织或个人可以直接联系我,及时为你提供专业的定制技术支持。
工作不是一切。工作是每个人安身立命、成长发展的基础。但你要知道工作是永远也做不完的,时间会抹去很多问题。多关注自己、家人和朋友,这些才是我们生活中更为重要的东西。