| 
    
     |  | 解決した様ですが、少し速くなる方法を考えました、 Dictionaryを使えばもっと速く成りますが
 取りあえず、コードを活かして以下の様にすると幾らか速くなると思います
 
 条件として、Sheet1、Sheet2共に「顧客コード」をKeyとして整列しても構わないと言う事にします
 Upされたコードでは、Sheet2から1つ取り出して、Sheet1と比較していますが
 此れを逆にします、Sheet1から1つ取り出して、Sheet2と比較しています
 この時、比較を開始する位置を前回見つかった位置からとします
 (両シート共に整列している居る事により、前回見つかった位置因り上には同じコード無い)
 
 Public Sub Test_2()
 
 Dim i As Long
 Dim j As Long
 Dim wksS1 As Worksheet
 Dim wksS2 As Worksheet
 Dim lngCount As Long
 Dim s1max As Long
 Dim s2max As Long
 
 Set wksS1 = Sheets("補助1")
 Set wksS2 = Sheets("補助2")
 
 With wksS1
 s1max = .Range("A" & .Rows.Count).End(xlUp).Row
 '「顧客コード」をKeyとして整列
 .Range("A2:H" & s1max).Sort _
 Key1:=.Range("B2"), Order1:=xlAscending, _
 Header:=xlNo, OrderCustom:=1, MatchCase:=False, _
 Orientation:=xlTopToBottom, SortMethod:=xlStroke
 End With
 
 With wksS2
 s2max = .Range("A" & .Rows.Count).End(xlUp).Row
 '「顧客コード」をKeyとして整列
 .Range("A2:D" & s2max).Sort _
 Key1:=.Range("B2"), Order1:=xlAscending, _
 Header:=xlNo, OrderCustom:=1, MatchCase:=False, _
 Orientation:=xlTopToBottom, SortMethod:=xlStroke
 End With
 
 lngCount = 2
 For i = 2 To s1max
 For j = lngCount To s2max
 '「顧客コード」が等しいならForを抜ける
 If wksS1.Cells(i, 2) = wksS2.Cells(j, 2) Then
 Exit For
 End If
 Next j
 'Sheet2から「顧客コード」が見つかった場合
 If j <= s2max Then
 '顧客名、住所を転記
 '      wksS1.Cells(i, 6).Resize(, 2).Value _
 '          = wksS2.Cells(j, 3).Resize(, 2).Value
 wksS1.Cells(i, 7).Resize(, 2).Value _
 = wksS2.Cells(j, 3).Resize(, 2).Value
 'Sheet2の探索開始位置を変更
 lngCount = j
 Else
 'Sheet2の探索開始位置を先頭に変更
 lngCount = 2
 End If
 Next i
 
 Set wksS1 = Nothing
 Set wksS2 = Nothing
 
 End Sub
 
 |  |