|    | 
     >転記するデータをいったん配列に入れておき、 
>最後に一括して シートに転記するようにすれば、 
>もっと速く処理できますけど。 
 
Sub test3_Dictionary2() 
  Const MAX = 20000 
  Dim WS1 As Worksheet 
  Dim WS2 As Worksheet 
  Dim r1 As Range, r2 As Range 
  Dim LstR1 As Long, LstR2 As Long 
  Dim i&, v, u, k& 
  Dim dic As Object 
  Dim t& 
  t = timeGetTime() 
   
  Set dic = CreateObject("Scripting.Dictionary") 
  Set WS1 = Worksheets(1) 
  Set WS2 = Worksheets(2) 
  With WS1 
    LstR1 = MAX '.Cells(Rows.Count, 1).End(xlUp).Row 
    v = .Range("A1:A" & LstR1).Value 
    For i = 1 To UBound(v) 
     dic(v(i, 1)) = Empty 
    Next 
    ReDim u(1 To UBound(v), 1 To 1) 
    LstR2 = MAX ' WS2.Cells(Rows.Count, 1).End(xlUp).Row 
    'WS2 A列をLoop 
    v = WS2.Range("A1:A" & LstR2).Value 
    For i = 1 To UBound(v) 
     'Bk2シートA列のあるセル値が、Bk1の辞書にあるか調べる 
      If Not dic.Exists(v(i, 1)) Then 
      '↓無かった時の処理 
        k = k + 1 
        u(k, 1) = v(i, 1) 
      End If 
    Next i 
    If k Then 
     .Cells(LstR1 + 1, 1).Resize(k).Value = u 
    End If 
  End With 
  
  Debug.Print "Dict_arry", timeGetTime() - t 
   
End Sub 
 
■上と同じ 2万行データの 結果です 
 
Dict_arry   85 
 
 | 
     
    
   |