Excel VBAを用いたデータ整合性チェックの方法と応用

この記事では、Excel VBAを用いたデータの整合性チェックについて詳しく説明します。シート内や他のシートとのデータ整合性チェックは、日常業務でのデータのエラーや誤入力を防ぐために非常に重要です。この記事では具体的なコード例とその詳細な解説、さらに応用例を3つご紹介します。

目次

Excel VBAの基本

Excel VBA(Visual Basic for Applications)は、Microsoft Excelに組み込まれたプログラミング言語です。これを用いると、単純作業の自動化だけでなく、高度なデータ分析やレポート作成も可能になります。

そもそも、どこにVBAコードを書いて、どう実行すれば良いのか分からない場合は、以下の記事をご参照ください。

基本的なデータ整合性チェックのコード

以下は、同一シート内のデータ整合性をチェックするVBAのサンプルコードです。


Sub DataIntegrityCheck()
    Dim lastRow As Long
    Dim checkRange As Range
    Dim cell As Range
    '最後の行を取得
    lastRow = ThisWorkbook.Sheets("Sheet1").Cells(ThisWorkbook.Sheets("Sheet1").Rows.Count, "A").End(xlUp).Row
    'A1から最後の行までの範囲を設定
    Set checkRange = ThisWorkbook.Sheets("Sheet1").Range("A1:A" & lastRow)
    'データの整合性チェック
    For Each cell In checkRange
        If cell.Value <> cell.Offset(0, 1).Value Then 'A列とB列が異なる場合
            cell.Interior.Color = RGB(255, 0, 0) 'A列のセルを赤色にする
        End If
    Next cell
End Sub

このコードは、Sheet1のA列とB列のデータを比較し、異なる場合A列のセルの背景色を赤に変更します。これにより、簡単にデータの不整合を視覚的に確認できます。

コードの詳細解説

– `Dim`で変数を宣言しています。lastRowはデータの最後の行を保存するための変数、checkRangeはデータの範囲を保存するための変数、cellは範囲内のセルを順に処理するための変数です。

– `ThisWorkbook.Sheets(“Sheet1”).Cells(…).End(xlUp).Row`はSheet1のA列の最後の行を取得するためのコードです。

– `For Each … Next`ループを使用して、A列の各セルとその隣のB列のセルを比較しています。`cell.Offset(0, 1)`はcellの隣のセルを示しています。

応用例

1. 別のシートとのデータの整合性チェック

以下のコードは、Sheet1のA列のデータとSheet2のA列のデータが一致するかをチェックします。


Sub CheckIntegrityBetweenSheets()
    Dim lastRow As Long
    Dim cell As Range
    'Sheet1の最後の行を取得
    lastRow = ThisWorkbook.Sheets("Sheet1").Cells(ThisWorkbook.Sheets("Sheet1").Rows.Count, "A").End(xlUp).Row
    'データの整合性チェック
    For i = 1 To lastRow
        If ThisWorkbook.Sheets("Sheet1").Cells(i, 1).Value <> ThisWorkbook.Sheets("Sheet2").Cells(i, 1).Value Then
            ThisWorkbook.Sheets("Sheet1").Cells(i, 1).Interior.Color = RGB(255, 0, 0)
        End If
    Next i
End Sub

2. 複数列のデータ整合性チェック

次のコードは、A列からC列までの3つの列がすべて同じ値を持つかどうかをチェックします。


Sub CheckMultipleColumnsIntegrity()
    Dim lastRow As Long
    Dim i As Long

    '最後の行を取得
    lastRow = ThisWorkbook.Sheets("Sheet1").Cells(ThisWorkbook.Sheets("Sheet1").Rows.Count, "A").End(xlUp).Row

    'データの整合性チェック
    For i = 1 To lastRow
        If Not (ThisWorkbook.Sheets("Sheet1").Cells(i, 1).Value = ThisWorkbook.Sheets("Sheet1").Cells(i, 2).Value And _
                ThisWorkbook.Sheets("Sheet1").Cells(i, 1).Value = ThisWorkbook.Sheets("Sheet1").Cells(i, 3).Value) Then
            ThisWorkbook.Sheets("Sheet1").Cells(i, 1).Interior.Color = RGB(255, 0, 0)
        End If
    Next i

End Sub

3. 特定の条件下でのデータ整合性チェック

例えば、A列のデータが10以上の場合のみ、B列とのデータの整合性をチェックする例です。


Sub CheckIntegrityWithCondition()
    Dim lastRow As Long
    Dim cell As Range
    '最後の行を取得
    lastRow = ThisWorkbook.Sheets("Sheet1").Cells(ThisWorkbook.Sheets("Sheet1").Rows.Count, "A").End(xlUp).Row
    'データの整合性チェック
    For Each cell In ThisWorkbook.Sheets("Sheet1").Range("A1:A" & lastRow)
        If cell.Value >= 10 And cell.Value <> cell
.Offset(0, 1).Value Then
            cell.Interior.Color = RGB(255, 0, 0)
        End If
    Next cell
End Sub

まとめ

Excel VBAを利用してデータの整合性チェックを行う方法について解説しました。日常業務でのデータの不整合を早期に検出し、エラーや誤入力を防ぐことができます。この知識を基に、さらなる応用やカスタマイズを行い、データの品質を向上させることが期待されます。

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

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

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

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

コメント

コメントする

目次