私は大きなExcelシートを持っています。私はあるセルから別のセルにデータを移動することに興味があります。私はできるだけ少しの時間を取るためにコピー/ペースト機能を最適化する方法について研究していることを発見した:今VBAのコピー/ペースト機能とループの最適化
Sheet1.Range("A1").Copy
Sheet1.Range("A1").PasteSpecial xlPasteValues
Application.CutCopyMode=False'Clear Clipboard
:
Sheet1.Range("A1").Value = Sheet1.Range("B1").Value
または
Sheet1.Range("A1").Copy Destination:=Sheet1.Range("B1")
がより高速であります次のオプションを使用してコピーを作成する必要があります。
Range("A1").Select
Selection.Copy
Range("B1").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
これを前述のいずれかのコードに似たコードに変換することはできますか?
また、ループに関しては、 (可能であれば)それらを避ける方が一般的に速いのですか、コンパイラはどのように最適化されていますか?
"A1:A200"から "B1:B200"に値をコピーしたいとします。どちらの方法が一般的に良いでしょうか?
Dim counter As Integer
For counter = 1 To 200
Sheet1.Range("A" & CStr(counter)) = Sheet1.Range("B" & CStr(counter))
End counter
それとも、単にコードを使用した方が良いです:
Sheet1.Range("A1:A200").Copy Destination:=Sheet1.Range("B1:200")
誰かが私には適用の原則を理解するのに役立つことができれば、それが大きな価値があるであろうけれどもこれらの例には、原因の肉眼的に簡略化されているが私!
Range( "A1:A200")、Value = Sheets( "Sheet1")、Range( "B1:B200")のいずれかを使用すると、 '、値をコピーしたいだけの場合 –
ループ付きAは単純に、類似のシートに適用されたコマンドのグループ化です。したがって、各コードを1行ずつ書き出して実行するよりも、技術的に速いです。 – user1
範囲をコピーするほうがコピーが速くなります。しかし、コピー時間を短縮する本当の機能は、画面更新(Application.ScreenUpdating = False、コピー後はApplication.ScreenUpdating = True)を無効にすることです。 –