2016-11-21 6 views
0

私は大きな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") 

誰かが私には適用の原則を理解するのに役立つことができれば、それが大きな価値があるであろうけれどもこれらの例には、原因の肉眼的に簡略化されているが私!

+3

Range( "A1:A200")、Value = Sheets( "Sheet1")、Range( "B1:B200")のいずれかを使用すると、 '、値をコピーしたいだけの場合 –

+0

ループ付きAは単純に、類似のシートに適用されたコマンドのグループ化です。したがって、各コードを1行ずつ書き出して実行するよりも、技術的に速いです。 – user1

+0

範囲をコピーするほうがコピーが速くなります。しかし、コピー時間を短縮する本当の機能は、画面更新(Application.ScreenUpdating = False、コピー後はApplication.ScreenUpdating = True)を無効にすることです。 –

答えて

0

まず、SelectSelectionを使用しないでください。これはあなたのコードを本当に遅くします。特にループ内にある。

値をコピーする最速の方法は、単純にさらにあなたがScreenupdatingを無効にし、式がペースト領域にreferr場合は特に、ワークシートの自動化された計算をオフに切り替える必要があります。このRange("B1:B99").Value=Range("A1:A99").Value

を行うことです。合計でApplication.ScreenUpdating=False Application.Calculation=xlCalculationManual

をそれが何らかの形で次のようになります。値などを大量にコピーするとき

Sub CopyFast() 
    Application.ScreenUpdating = False 
    Application.Calculation = xlCalculationManual 

    ActiveSheet.Range("B1:B99") = ActiveSheet.Range("A1:A99") 

    Application.Calculation = xlCalculationAutomatic 
    Application.ScreenUpdating = True 
End Sub 

しかし、これは本当に重要取得しますこの例の単純なコピー作業ではなく、ループ内のループです。

+0

あなたの答えをありがとう。私は無効化されたインターフェイスとダイレクトコピーコマンドでそれをやりました。シートは5分ではなく、実行に1分かかります(高速コンピュータでは)。これには、ループ、さまざまな関数呼び出し、および多くのシートが含まれます。これは本当に助けになりました! – bgaard