2016-09-23 3 views
2

、ExcelでVBAを使用して、2枚のスプレッドシートに(それらの行内および細胞)のレコードを比較します。シートは、少数の行から数百の範囲にわたることができる。私はどんな質問にも喜んで答えます、私は以前はVBAを使ったことはありませんでしたが、私は他の言語での経験があります。私はワークブックに2枚を取り、シート1と異なっているのSheet2のセルを強調しようとしていますハイライトの違い

これは、現在の行の中の細胞そして、Sheet2のの行で行く必要があります。行の最初のセルを取り、そのセルの内容は、シート1内に存在するかどうかを確認し、そのセルの内容が存在しない場合は、新しいエントリとして行全体を強調表示します。内容がSheet1に表示される場合は、各シートのエントリが表示される行の各セルを通過し、Sheet2のみの変更を強調表示します。

すべて私がこれまでに考え出した:

Sub DetectChanges() 
Rem compares two sheets by row. let sheet1 be the old one and sheet2 be the new one. 
Rem *hopefully* highlights any differences. Make column1 unique identifiers 
Dim ws1, ws2 As Worksheet 
Set ws1 = Worksheets("Sheet1") 
Set ws2 = Worksheets("Sheet2") 
For Each rw In ws2.Rows 

' check identifier for active row & detect changes 
Next 

End Sub 

は、任意の助けをありがとう!

+0

う条件付き書式機能しませんか? – BruceWayne

答えて

0

は、この(コメント)OPの明確化後

を編集したコードが正しい方法であなたを取得する必要があります。

Option Explicit 

Sub DetectChanges() 
    Dim ws1 As Worksheet, ws2 As Worksheet '<-- explicitly declare each variable type 
    Dim ws1Data As Range, f As Range, cell As Range 
    Dim icol As Long 

    Set ws1Data = Worksheets("Sheet01").Columns(1).SpecialCells(xlCellTypeConstants) '<-- set a range with Sheet1 cells containing data 

    With Worksheets("Sheet02") '<--| reference Sheet2 
     For Each cell In Intersect(.UsedRange, .Columns(1)).SpecialCells(xlCellTypeConstants) '<-_| loop through its column "A" non blank cells 
      Set f = ws1Data.Find(what:=cell.value, LookIn:=xlValues, LookAt:=xlWhole) '<--| search for current cell value in Sheet1 data 
      If f Is Nothing Then '<--| if not found then... 
       Intersect(cell.EntireRow, .UsedRange).Interior.ColorIndex = 3 '<--| highlight current cell entire row 
      Else 
       For icol = 1 To .Range(cell, .Cells(cell.Row, .Columns.Count).End(xlToLeft)).Columns.Count - 1 '<--| loop through Sheet2 current cell row 
        If f.Offset(, icol) <> cell.Offset(, icol) Then '<--| if it doesn't match corresponding cell in Sheet1 
         cell.Offset(, icol).Interior.ColorIndex = 3 '<--| highlight Sheet2 not-matching cell 
         f.Offset(, icol).Interior.ColorIndex = 3 '<--| highlight Sheet1 not-matching cell 
        End If 
       Next icol 
      End If 
     Next cell 
    End With 
End Sub 
+0

一意の識別子は、両シートの列Aであり、それ以外はいけないものを強調し、識別子がに表示された行を比較して、細胞のすべてが一致するかどうかを確認する必要があります。データは同じ順序で表示されますが、この情報は一意ではないため、どちらのワークシートにも識別子が表示されている行のみを検索する必要があります。あなたの以前の助けをありがとう! – Sacro

+0

@Sacro、編集されたコードを参照してください。私に知らせてください – user3598756

+0

これは素晴らしいことです!どうもありがとうございます!!! – Sacro

関連する問題