为什么变化的变异具有如此大的差异?

时间:2011-06-24 20:28:20

标签: vba

请解释一下,为什么第二种变体更快?

iTimer! = Timer
sname = Split(Cells(2, 300).Address, "$")(1)

Range("A300:" & sname & "600").Value2 = Range("A300:" & sname & "600").Value2

    MsgBox "Time is " & _
Timer - iTimer! & " sec.", vbExclamation, ""

在〜1秒内执行

iTimer! = Timer
sname = Split(Cells(2, 300).Address, "$")(1)
Range("A1:" & sname & "300").Select
Range("A300:" & sname & "600").Value2 = ActiveCell.Value2

    MsgBox "Time is " & _
Timer - iTimer! & " sec.", vbExclamation, ""

执行时间约为0.01秒

1 个答案:

答案 0 :(得分:1)

对我而言,第一个变体,即没有Select-ActiveCell shenanigan,比第二个变体(Select-ActiveCell)更快(约6-8倍)。

这是可以预料到的,因为VBA和Excel工作表之间的每次通信都有一定的开销,并且您在第一个变体中最小化了交互次数。

现在我不知道为什么你会遇到相反的情况。除非这是一个错字,你的意思是变体1更快?我不知道。请注意,我在Excel 2003上测试过它(因此必须在测试中将列数减少到256,即Cells(2, 256))。我不明白为什么Excel 2007或2010中的结果会有所不同,但遗憾的是我没有那些并且无法测试它们。

此外,我使用Debug.Print而不是MsgBox来显示结果,这在进行多次测试时更加烦人。