この記事では、Excel VBAを使用して参照元データとの差異をチェックする方法を解説します。具体的なコードとその詳細解説、さらに応用例を通じて、業務効率化の一助となる情報を提供します。
目次
基本的な差異チェックのコード
Sub CheckDifferences()
Dim rng1 As Range, rng2 As Range
Dim cell As Range
'参照元データの範囲
Set rng1 = ThisWorkbook.Sheets("Sheet1").Range("A1:A10")
'比較対象データの範囲
Set rng2 = ThisWorkbook.Sheets("Sheet2").Range("A1:A10")
For Each cell In rng1
'差異があればセルの背景色を赤にする
If cell.Value <> rng2.Cells(cell.Row, cell.Column).Value Then
cell.Interior.Color = vbRed
End If
Next cell
End Sub
このコードは、Sheet1のA1からA10までの範囲と、Sheet2のA1からA10までの範囲のデータの差異をチェックし、差異があればSheet1の該当セルの背景色を赤くします。
コードの詳細解説
このスクリプトは、2つのデータ範囲間での差異をチェックする基本的な方法を示しています。For Eachループを使用して、rng1の各セルについて、同じ位置にあるrng2のセルと比較を行います。もし値が異なれば、rng1のセルの背景色を赤くして差異を視覚的に示しています。
応用例1: セルの背景色ではなく、差異のあるセルの横にコメントを追加
Sub CheckDifferencesWithComments()
Dim rng1 As Range, rng2 As Range
Dim cell As Range
'参照元データの範囲
Set rng1 = ThisWorkbook.Sheets("Sheet1").Range("A1:A10")
'比較対象データの範囲
Set rng2 = ThisWorkbook.Sheets("Sheet2").Range("A1:A10")
For Each cell In rng1
'差異があればセルの隣にコメントを追加
If cell.Value <> rng2.Cells(cell.Row, cell.Column).Value Then
cell.Offset(0, 1).Value = "差異あり"
End If
Next cell
End Sub
応用例2: 差異があった場合にメッセージボックスを表示
Sub CheckDifferencesWithMsgBox()
Dim rng1 As Range, rng2 As Range
Dim cell As Range
Dim diffFlag As Boolean
diffFlag = False
'参照元データの範囲
Set rng1 = ThisWorkbook.Sheets("Sheet1").Range("A1:A10")
'比較対象データの範囲
Set rng2 = ThisWorkbook.Sheets("Sheet2").Range("A1:A10")
For Each cell In rng1
'差異があるかチェック
If cell.Value <> rng2.Cells(cell.Row, cell.Column).Value Then
diffFlag = True
Exit For
End If
Next cell
If diffFlag Then
MsgBox "差異が見つかりました", vbExclamation, "差異チェック結果"
End If
End Sub
応用例3: 差異のあるセルのデータを新しいシートにコピー
Sub CopyDifferencesToNewSheet()
Dim rng1 As Range, rng2 As Range
Dim cell As Range
Dim wsNew As Worksheet
Dim lastRow As Long
'新しいシートを作成
Set wsNew = ThisWorkbook.Worksheets.Add
'参照元データの範囲
Set rng1 = ThisWorkbook.Sheets("Sheet1").Range("A1:A10")
'比較対象データの範囲
Set rng2 = ThisWorkbook.Sheets("Sheet2").Range("A1:A10")
For Each cell In rng1
'差異があれば新しいシートにデータをコピー
If cell.Value <> rng2.Cells(cell.Row, cell.Column).Value Then
lastRow = wsNew.Cells(wsNew.Rows.Count, 1).End(xlUp).Row + 1
cell.EntireRow.Copy wsNew.Cells(lastRow, 1)
End If
Next cell
End Sub
まとめ
Excel VBAを利用することで、参照元データとの差異を効率的にチェックし、さまざまなアクション(背景色の変更、コメントの追加、新しいシートへのコピーなど)を自動化することが可能です。この技術を活用することで、大量のデ
ータ間での手動の差異チェックの時間と労力を大幅に削減することができ、業務の効率化に大きく寄与します。
コメント