2011-06-24 40 views
0

請解釋一下,爲什麼第二個變種更快?爲什麼變化excel值的變體差異如此之大?

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

對於我的第一變體中,即,沒有Select-ActiveCell shenanigan,更快(約6-8倍)比第二個變體(與Select-ActiveCell)。

這是可以預料的,因爲VBA和Excel工作表之間的每個通信都有一定的開銷,並且您正在最小化第一個變體中的交互次數。

現在我不知道爲什麼你會遇到相反的情況。除非它是一個錯字,而你的意思是變體1更快?我不知道。請注意,我在Excel 2003上測試過它(因此在測試中必須將列數減少到256,即Cells(2, 256))。我不明白爲什麼Excel 2007或2010中的結果會有所不同,但不幸的是我沒有這些結果,也無法測試它們。

此外,我使用Debug.Print而不是MsgBox來顯示結果,這在執行多次測試實現時不那麼討厭。

相關問題