请解释一下,为什么第二种变体更快?
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秒
答案 0 :(得分:1)
对我而言,第一个变体,即没有Select-ActiveCell
shenanigan,比第二个变体(Select-ActiveCell
)更快(约6-8倍)。
这是可以预料到的,因为VBA和Excel工作表之间的每次通信都有一定的开销,并且您在第一个变体中最小化了交互次数。
现在我不知道为什么你会遇到相反的情况。除非这是一个错字,你的意思是变体1更快?我不知道。请注意,我在Excel 2003上测试过它(因此必须在测试中将列数减少到256,即Cells(2, 256)
)。我不明白为什么Excel 2007或2010中的结果会有所不同,但遗憾的是我没有那些并且无法测试它们。
此外,我使用Debug.Print
而不是MsgBox
来显示结果,这在进行多次测试时更加烦人。