2016-07-04 5 views
1

私は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 
+1

可能であれば、画面の更新が遅くなるため、セルの選択を避けてください。最初にApplication.ScreenUpdating = Falseを入れて、それが改善されているかどうかを調べることができます。ここで選択するための選択肢は[リンク](http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros) – Clusks

+2

で与えられます。コードが不完全なようです's abd' End If's) 'Copy'を使わず、' targetRange.Value = sourceRange.Value'のように直接値を割り当てることもできます。 – arcadeprecinct

答えて

0

私は、hereに答えとして、あなたは、配列(複数可)を直接操作し、Excelに戻って結果を送信して、配列にセルを読み出すオフにはるかに優れていますあなたが終わったら。 Excelの配列処理は最高ではありませんが、速度の観点から比較はありません。

This articleは、プロセスをより詳細に説明しています。

関連する問題