2016-08-11 12 views
0

マクロを使用して2つのExcelスプレッドシートを比較する方法があるかどうかは疑問でした。私は基本的に作業を行いますが、列ごとにチェックするマクロを持っています。つまり、A(1,1)に定義された値がsheet1であり、同じ値がA(1,1)sheet2に存在しない場合、その列の任意の行に存在する値は不平をつかないでしょう。2を比較マクロを使用してファイルをExcel

'compare Sheet 
Sub CompareTable() 
Dim tem, tem1 As String 
Dim text1, text2 As String 
Dim i As Integer, hang1 As Long, hang2 As Long, lie As Long, maxhang As Long, maxlie As Long 
    Sheets("Sheet1").Select 
    Columns("A:A").Select 
    With Selection.Interior 
     .Pattern = xlNone 
     .TintAndShade = 0 
     .PatternTintAndShade = 0 
    End With 
    Range("A1").Select 

    Sheets("Sheet2").Select 
    Dim lastRow As Long 
    With ActiveSheet 
    lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row 
    End With 
    Rows("1:" & lastRow).Select 
    With Selection.Interior 
     .Pattern = xlNone 
     .TintAndShade = 0 
     .PatternTintAndShade = 0 
    End With 
    Range("A1").Select 
    maxhang = lastRow  ' number of the last row containg data 
    MaxRow = lastRow 
    Dim LastCol As Integer 
    With ActiveSheet 
     LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column 
    End With 
    MaxColumn = LastCol 
    For col = 1 To MaxColumn 
     For hang1 = 2 To maxhang 
      Dim a As Integer 
      a = 0 
      tem = Sheets(1).Cells(hang1, col) 
      For hang2 = 1 To maxhang 
       tem1 = Sheets(2).Cells(hang2, col) 
       If tem1 = tem Then 
       a = 1 
       Sheets(2).Cells(hang2, col).Interior.ColorIndex = 6 
       For lie = 1 To maxlie 
        text1 = Sheets(1).Cells(hang1, lie) 
        text2 = Sheets(2).Cells(hang2, lie) 
        If text1 <> text2 Then 
        Sheets(2).Cells(hang2, lie).Interior.ColorIndex = 8 
        End If 
       Next 
       End If 
      Next 

      If a = 0 Then 
      Sheets(1).Cells(hang1, 1).Interior.ColorIndex = 5 
      End If 
     Next 
    Next 
End Sub 

注:私は私の行のマッチを与える可能性のある解決策を探していますので、任意の行の任意の値をSheet2のと一致していない場合、それはそれを強調表示する必要があります。

私は他の選択肢も持っています。どんな助けや提案も大歓迎です。

ありがとうございました!

+0

enter image description here

を参照してください。 、1) 'がRow1に見つからない場合、コードは' A1 - > Cell(1,1) 'をハイライトします;' B1 - > Cell(2,1) 'がRow2で見つかった場合、それを強調表示します。私の理解は正しいのですか? – Siva

+0

他に、1対1のマッピングをお探しですか? 'Sheet1-A1' - >' Sheet2-A1'、 'Sheet1-A2' - >' Sheet2-A2'、... 'Sheet1-B1' - >' Sheet2-B1' .. – Siva

+0

のように基本的に私の要求は何ですか、私は 'sheet1'の1行目と' sheet2'の1行目のように行全体をマッチさせる必要があります。私は両方のファイルを行ごとに比較したいです。しかし、私の現在のコードがしていることは、 'sheet1'の各値を' sheet2'の列でチェックすることです。問題は 'A(1,2)'が 'sheet1'に値' A'を持ち、 'A(1,2、 5) 'が'シート2 'に 'A'を持っていれば強調表示されません。 – Joe

答えて

1

これがあなたが期待しているものかどうかはわかりません。 >セル(1 - `A1のであれば、コードを実行した後、私の次のコード

Sub CompareTable() 

    Dim ws1 As Worksheet 
    Dim ws2 As Worksheet 

    Dim table1 As Range 
    Dim table2 As Range 

    Dim table1Rows As Integer 
    Dim table1Cols As Integer 

    Set ws1 = Worksheets("sheet1") 
    Set ws2 = Worksheets("sheet2") 
    Set table1 = ws1.Cells 
    Set table2 = ws2.Cells 

    table1Rows = ws1.UsedRange.Rows.Count 
    table1Cols = ws1.UsedRange.Columns.Count 

    For i = 1 To table1Rows 
     For j = 1 To table1Cols 
      If table1(i, j).Value = table2(i, j).Value Then 
      Else 
      ws1.Cells(i, j).Interior.Color = vbYellow 
      End If 

     Next 

    Next 

End Sub 

Sheet1の表 enter image description here Sheet2のテーブルの私の結果をtgisis

enter image description here

関連する問題