私はExcel VBAを初めて使用しており、多くの経験がありません。私は2つのワークシートのデータを比較し、値が一致すると、それをコピーして2番目のワークシートに貼り付けます。私はすべての行を比較するループを使用し、これを行うより良い方法があるかどうか疑問に思っていましたか?私は現在ブルートフォースを使用しており、プログラムが非常に長く実行されないような方法があることを望んでいました。 (私は異なるシート上でこのコードブロックを13回繰り返す)。基本的にこのコードは、特定の条件を満たす場合に情報を統合しています。以下は私のコードです。あなたがアクセスしたり、複数のセルを変更する必要がある場合スピードのために私のExcel VBAコードの比較ループをどのようにリファクタリングするのですか?
Sub consolidate(z)
Sheets(z).Range("B1:AXH100").Delete '''deletes former values'''
For i = 1 To 30
For x = 1 To 500
If IsEmpty(Sheets("Sheet1").Cells(x, 13)) Then 'if cell value is empty skip it'
a = 1
Else:
If Sheets("Sheet1").Cells(x, 18) = Sheets(z).Cells(1, 1) Then 'check to see if value is same'
If Sheets("Sheet1").Cells(x, 13) = Sheets(z).Cells(i, 1) Then 'check to see if value is same'
Sheets("Sheet1").Cells(x, 15).Copy 'copy value'
Sheets(z).Select 'select second sheet'
Cells(i, 1).Select
ActiveSheet.Cells(ActiveCell.Row, Columns.Count).End(xlToLeft).Offset(0, 1).Select 'offsets cell to the
left'
Selection.PasteSpecial past:=xlPasteValues 'pastes'
End Sub
可能であれば、画面の更新が遅くなるため、セルの選択を避けてください。最初にApplication.ScreenUpdating = Falseを入れて、それが改善されているかどうかを調べることができます。ここで選択するための選択肢は[リンク](http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros) – Clusks
で与えられます。コードが不完全なようです's abd' End If's) 'Copy'を使わず、' targetRange.Value = sourceRange.Value'のように直接値を割り当てることもできます。 – arcadeprecinct