2016-05-24 15 views
0

3つの列の10,000データ行を比較するために以下のマクロを実行すると、一致するレコードの一部が強調表示されます。誰かが私にこれを訂正する助けてもらえますか?不正な結果を与える2つのブックの比較

Sub Compare() 
Call Comparitor("Sheet1", "Sheet2") 
End Sub 
Sub Comparitor(shtSheet1 As String, shtSheet2 As String) 

Dim X As Long 
Dim Y As Long 
Dim Z As Long 
Dim diffnd As Long 
Dim cnt1 As Long 
Dim cnt2 As Long 


cnt2 = Worksheets("Sheet2").Cells.SpecialCells(xlCellTypeLastCell).row 
cnt1 = Worksheets("Sheet1").Cells.SpecialCells(xlCellTypeLastCell).row 

'Color the mismatching cells in Yellow on Sheet2 
For Z = 1 To cnt2 
    For Y = 1 To cnt1 
     If ActiveWorkbook.Worksheets(shtSheet2).Cells(Z, 1).Value = ActiveWorkbook.Worksheets(shtSheet1).Cells(Y, 1).Value Then 
      For X = 2 To 22 
       If Not ActiveWorkbook.Worksheets(shtSheet2).Cells(Z, X).Value = ActiveWorkbook.Worksheets(shtSheet1).Cells(Y, X).Value Then 
        ActiveWorkbook.Worksheets(shtSheet2).Cells(Z, X).Interior.Color = vbYellow 
        diffnd = diffnd + 1 
       End If 
      Next 
     Exit For 

答えて

0

ワークシートとワークシートオブジェクトを設定して、シート管理を改善してください。私はこれが解決策だとは完全には分かっていない。あなたがしなかった唯一の場所は、最初にcnt1とcnt2を設定したときだったようです。また、shtSheet1変数やshtSheet2変数は使用しないでください。

wb、ws1、およびws2に追加して、少し読みやすくしました。それにショットをつけて、それが何をするかを見てください。それ以外の場合は、あなたのコードが正しいと思います。

Sub Compare() 
Call Comparitor("Sheet1", "Sheet2") 
End Sub 

Sub Comparitor(shtSheet1 As String, shtSheet2 As String) 

Dim X As Long 
Dim Y As Long 
Dim Z As Long 
Dim diffnd As Long 
Dim cnt1 As Long 
Dim cnt2 As Long 

Dim wb As Workbook 
Dim ws1 As Worksheet 
Dim ws2 As Worksheet 

Set wb = ActiveWorkbook 
Set ws1 = wb.Sheets(shtSheet1) 
Set ws2 = wb.Sheets(shtSheet2) 

cnt2 = ws2.Cells.SpecialCells(xlCellTypeLastCell).Row 
cnt1 = ws1.Cells.SpecialCells(xlCellTypeLastCell).Row 

'Color the mismatching cells in Yellow on Sheet2 
For Z = 1 To cnt2 
    For Y = 1 To cnt1 
     If ws2.Cells(Z, 1).Value = ws1.Cells(Y, 1).Value Then 
      For X = 2 To 22 
       If Not ws2.Cells(Z, X).Value = ws1.Cells(Y, X).Value Then 
        ws2.Cells(Z, X).Interior.Color = vbYellow 
        diffnd = diffnd + 1 
       End If 
      Next 
     Exit For 
+0

ありがとうございました。しかし、私はまだ同じ問題を抱えています。そして今、私はほんの数行のコードを見逃してしまったことに気づいただけです。私は以下に追加しました。それが助けば。 – KIchigo

+0

私はちょうど今週、私がセルを着色してから並べ替える状況に遭遇しました。何らかの理由で、セルの色がソートで遷移しませんでした。おそらく後でマクロでソートされますか(ここには表示されていません)?この問題の私の解決策は、セルをソートして色付けすることでした。 –

+0

私はちょうど長さのために答えとして以下のコードの後半部分を公開しました。おそらくそれは私が直面している問題を説明するかもしれません。 – KIchigo

関連する問題