私の持つコードのデータ量は非常に遅いです(シートごとに10+以上)。私は配列を使ってスピードアップする方法があると信じていますが、どうやってそれをどうやって行くのかは分かりません。私は状況を詳細に説明しようとします。アレイを使用して2枚のシートを比較する
私は、差異を見つけるために比較しようとしている請求書番号、部品番号および販売価格(他の情報の中でも)の2つのワークシートを持っています。私は両方のシートの請求書番号と部品番号の連結を使用して、データの各行に固有の番号を作成しました。私はまた、両方のシートをその番号で手動でソートしました。私は、これらのユニークな#のどれがsheet1上にあり、sheet2上ではなく、その逆であるのかを見たいと思います。 (別の部分は、一致するものをチェックして、販売価格が異なるかどうかを確認することですが、私はそれを簡単に把握できると思います)。目標は、ベンダーによって部分的にまたは完全に払われなかった請求書私の会社。
私は1枚のシートに約10k行のデータを持ち、もう1枚に約11kのデータを持っています。以下は、私がwww.vb-helper.com/howto_excel_compare_lists.htmlで見つけたものから修正したものと、このサイトの同様の質問に対する答えを見ているときのコードです。シートが反転しているほぼ同じ第2のサブがある。私はそれが両方の方法を行うただ1つを書くことが可能であるかどうかわかりません。
Private Sub cmdCompare2to1_Click()
Dim first_index As Integer
Dim last_index As Integer
Dim sheet1 As Worksheet
Dim sheet2 As Worksheet
Dim r1 As Integer
Dim r2 As Integer
Dim found As Boolean
Set sheet1 = Worksheets(1)
Set sheet2 = Worksheets(2)
Application.ScreenUpdating = False
first_index = 1
last_index = sheet1.Range("a" & Rows.Count).End(xlUp).Row
' For each entry in the second worksheet, see if it's
' in the first.
For r2 = first_index To last_index
found = False
' See if the r1-th entry on sheet 2 is in the sheet
' 1 list.
For r1 = first_index To last_index
If sheet1.Cells(r1, 16) = sheet2.Cells(r2, 9) Then
' We found a match.
found = True
Exit For
End If
Next r1
' See if we found it.
If Not found Then
' Flag this cell.
sheet2.Cells(r2, 9).Interior.ColorIndex = 35
End If
Next r2
Application.ScreenUpdating = True
End Sub
それは小さなデータのセットに対して正常に動作しますが、私はそれが通過作っていた行の数が多いと、それだけで永遠にかかり、会計士のどれもがそれを使用したいん。理想的には、違いを緑色に変えるのではなく、別々のシートにコピーします。つまり、シート3はシート1のシートではなくシート2のすべてをシート1にコピーします。
解決策を探した後、インターネット上の誰もが、スピードを上げるために配列の使用が必要であると考えているようです。しかし、私は現在のコードにその素敵なアドバイスをどのように適用するかを理解できません。私は、このコードを破棄してやり直さなければならない可能性が高いことを認識していますが、やはり私はどのように尋ねていますか?
条件を1つの基準に基づいて比較しているので、条件付き書式を使用してジョブを実行できると思います。 –