Excel VBAを活用した参照元データの差異チェックと業務効率化

この記事では、Excel VBAを使用して参照元データとの差異をチェックする方法を解説します。具体的なコードとその詳細解説、さらに応用例を通じて、業務効率化の一助となる情報を提供します。

目次

Excel VBAの基本

Excel VBA(Visual Basic for Applications)は、Microsoft 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を利用することで、参照元データとの差異を効率的にチェックし、さまざまなアクション(背景色の変更、コメントの追加、新しいシートへのコピーなど)を自動化することが可能です。この技術を活用することで、大量のデ

ータ間での手動の差異チェックの時間と労力を大幅に削減することができ、業務の効率化に大きく寄与します。

VBAも良いけどパワークエリも良い

VBAの解説をしてきましたが、VBAは正直煩雑でメンテナンス性が悪いです。最近はモダンExcelと呼ばれるパワークエリやパワーピボットへのシフトが進んできています。本サイトでもパワークエリの特集をしており、サンプルデータを含む全11回の学習コンテンツでパワークエリを習得することができます。

クリックするとパワークエリの全11講座が表示されます。

パワーピボットの記事はありません。興味がある場合は、書籍で学んでみてください

コメント

コメントする

目次