| 
    
     |  | ▼まいった! さん: 
 何度も何度もシートの範囲を Findするのは面倒なので、
 Dictionaryオブジェクトに最初に登録しておいたらどうでしょう
 
 Sub Try1()
 Dim WS3 As Worksheet
 Dim WS4 As Worksheet
 Set WS3 = Worksheets("Sheet3")
 Set WS4 = Worksheets("Sheet4")
 
 'WS4のG列の値と WS3のB列の値とを比較、
 'WS4のI列の値を、WS3のG列に書き込む。
 Dim a1, a2
 Dim b1, b2
 Dim i As Long
 Dim dic As Object
 
 '(1)WS4 のG列とI列の値を Dictionaryに登録
 With WS4.Range("G:G")
 With Excel.Range(.Item(1), .Item(.Count).End(xlUp))
 b1 = .Value
 b2 = .Offset(, 2).Value
 End With
 End With
 Set dic = CreateObject("Scripting.Dictionary")
 For i = 1 To UBound(a1)
 dic(b1(i, 1)) = b2(i, 1)
 Next
 
 
 '(2)WS3のB列の値(a1配列)が Dictionaryのキーにあれば、 _
 DictionaryのItemを配列a2にコピー
 With WS3.Range("B:B")
 With Excel.Range(.Item(1), .Item(.Count).End(xlUp))
 a1 = .Value
 ReDim a2(1 To UBound(a1), 1 To 1)
 For i = 1 To UBound(a1)
 If dic.Exists(a1(i, 1)) Then
 a2(i, 1) = dic(a1(i, 1))
 End If
 Next
 .Offset(, 5).Value = a2
 End With
 End With
 
 Set dic = Nothing
 End Sub
 
 |  |