考虑在VBA代码中使用工作表函数 操作单元格区域的Excel工作表函数通常比完成同样任务的VBA程序更快(但不能确保总是这样,您可以对它们进行速度测试) 例如,在代码中使用SUM工作表函数比用VBA代码在单元格区域中循环并相加值要快得多,以此为例,下面的代码运行速度相对较慢。 Sub AddItSlow() Dim Start As Double, Finish As Double Start = Timer '-------------------------------------- '为了进行测试,我们循环5次 Dim N As Long For N = 1 To 5 '*************************** Dim Cell As Range For Each Cell In Worksheets(2).Range("A1:G200") [a1] = [a1] + Cell.Value Next Cell '*************************** Next N '-------------------------------------- Finish = Timer MsgBox "本次运行的时间是" & Finish - Start End Sub 下面的代码实现相同的功能,但运行得更快(几乎瞬间完成)。 Sub AddItFaster() '快近600倍 Dim Start As Double, Finish As Double Start = Timer '-------------------------------------- '为了进行测试,我们循环5次 Dim N As Long For N = 1 To 5 '*************************** [a1] = Application.WorksheetFunction. _ Sum(Worksheets(2).Range("A1:G200")) '*************************** Next '-------------------------------------- Finish = Timer MsgBox "本次运行的时间是" & Finish - Start End Sub 产生统计结果的函数(例如PRODUCT、COUNT、COUNTA和COUNTIF)是代替运行速度更慢的VBA代码的很好的选择,并且,一些工作表函数(例如MATCH和LOOKUP)能够将单元格区域作为参数。 不要认为工作表函数总是更快的 如下例所示,在VBA中没有Max或Min函数,但Excel中有该函数。于是,您能编写出如下代码: Sub MaxIt1() Dim Start As Double, Finish As Double Start = Timer '-------------------------------------- '为了测试,我们循环10000次 Dim N As Long For N = 1 To 10000 '*************************** [J1] = Application.Max([J2], [J3]) '*************************** Next N '-------------------------------------- Finish = Timer MsgBox "本次运行时间是" & Finish - Start End Sub 或者,您能在VBA中使用下面的方式实现相同的功能: Sub MaxIt2() Dim Start As Double, Finish As Double Start = Timer '-------------------------------------- '为了测试,我们循环10000次 Dim N As Long For N = 1 To 10000 '*************************** If [J2] >= [J3] Then [J1] = [J2] Else [J1] = [J3] '*************************** Next N '-------------------------------------- Finish = Timer MsgBox "本次运行的时间是" & Finish - Start End Sub 比较上面的两个程序,可能认为使用工作表函数会更快,但事实上用VBA代码可以获得几乎相同的速度。因此,在一些大的循环中,您可以对实现同样功能的工作表函数的VBA代码进行测试。一些内置的VBA函数事实上运行速度也是慢的,因此,在编写代码时,在不同方式之间进行速度测试总是值得的。 本贴所有示例文档见
vNYUcDcE.rar
(102.86 KB, 下载次数: 443)
By fanjy in 2006-8-26 注:转贴请注明真实来源并不得用于其它用途. 您有什么好的优化代码的方法和策略,也可贴出来供大家分享.
[此贴子已经被作者于2006-8-28 14:29:58编辑过] |