| 
    
     |  | UO3さんの言われる様に、シートの修飾が抜けている事と 
 Public Sub test_3()
 
 Dim i As Long, k As Long
 Dim RowEnd1 As Long
 Dim RowEnd2 As Long
 Dim Ws1 As Worksheet
 Dim Ws2 As Worksheet
 
 Set Ws1 = Sheets(1)
 RowEnd1 = Ws1.Cells(Rows.Count, 1).End(xlUp).Row
 Set Ws2 = Sheets(2)
 RowEnd2 = Ws2.Cells(Rows.Count, 1).End(xlUp).Row
 
 For i = 2 To RowEnd1
 For k = 2 To RowEnd2
 '     If Ws1.Cells(i, 1) & Cells(i, 2) & Cells(i, 3) = _
 '       Ws2.Cells(k, 1) & Cells(k, 2) & Cells(k, 3) Then
 If Ws1.Cells(i, 1).Value & vbTab & Ws1.Cells(i, 2).Value _
 & vbTab & Ws1.Cells(i, 3).Value = _
 Ws2.Cells(k, 1).Value & vbTab & Ws2.Cells(k, 2).Value _
 & vbTab & Ws2.Cells(k, 3).Value Then
 Exit For
 End If
 Next k
 If k > RowEnd2 Then
 Ws1.Cells(i, 1).Interior.ColorIndex = 34
 End If
 Next i
 
 Set Ws1 = Nothing
 Set Ws2 = Nothing
 
 End Sub
 
 
 例えば、以下の様なデータが有ったとします
 
 シート1
 大分類 中  小
 AAA   AA  BBB
 BB   BBB  CCC
 CC   CCC  DDD
 DD   DDD  EEE
 
 シート2
 BB   BAB  CCC
 AA   AAA  BBB
 DD   DDD  EGE
 CC   CCC  DDD
 AAA   AA  BBB
 
 今回の質問のコードですと
 
 If Ws1.Cells(i, 1) & Cells(i, 2) & Cells(i, 3) = _
 Ws2.Cells(k, 1) & Cells(k, 2) & Cells(k, 3) Then
 
 としていますので
 シート1の1行目は、AAAAABBBと成ります
 一方、シート2では、2行目もAAAAABBBと成り、4行目もAAAAABBBと成ります
 因って、本来4行目を引っかけたいのですが先に、2行目を引っかけてしまいます
 多分この様な事が起きていると思います
 
 因みに修正したコードでは、値の間にTabコードを挟んで連結していますので、
 (大分類、中、小に含まれない文字なら、特にTabで無くても構いません、例えば「:」「/」)
 シート1の1行目は、AAA:AA:BBBと成ります
 一方、シート2では、2行目はAA:AAA:BBBと成り、4行目はAAA:AA:BBBと成ります
 因って、2行目と4行目を見分けられるので、4行目にヒットします
 
 ただ、幾つか気に成る所が有りますので書いて置きます
 
 1、テスト用のデータの量を揃えて(多分1000行も有れば差が出るかな?)、
 最初に示したコード「Sub test_2」と今回の「Sub test_3」の時間を比べて見て下さい
 多分、「Sub test_2」の方が速く成ると思います
 セルの読み書きは非常に遅い動作と成りますし、文字列の連結も同じく遅い動作と成ります
 「Sub test_2」の場合、大分類が違った場合、セルの比較はシート1とシート2で2回ですし
 中分類で違った場合で、4回です、小分類まで行って6回です
 「Sub test_3」では、常に6回セルから読み出し、文字列を連結する操作が加わります
 この時間の差が「Sub test_2」と「Sub test_3」の差として出て来ると思います
 
 2、Yoshimさんのコードでは「Ws1.Cells(i, 1) & Cells(i, 2) & Cells(i, 3)」と成っていますが?
 もっと複雑なコードに成ると、此れがセル範囲を指すのか、値を指すのか勘違いの元(バグの元)に成ります
 必ず、値を示すなら「.Value」を付けましょう
 
 3、今回(前回も含めて)のコードは、1番基本のコードで速度が出ません
 多分1000行、10000行だといやに成るほど時間が掛かる筈です
 アルゴリズム、セルの操作等を見直せば劇的に速く成ると思いますので考えて見て下さい
 
 |  |