2011-06-24 22 views
0

私に説明してください。なぜ、2番目の変種がより速いのですか?なぜ変化の変種に大きな差があるのですか?

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で結果が異なる理由はわかりませんが、残念ながらそれらはなく、テストできません。

また、MsgBoxの代わりにDebug.Printを使用して、結果を表示しました。これは、テストの複数の実現を行う際にははるかに面倒です。

関連する問題