• 公開日:

エクセルのVLOOKUP関数でデータマッチング(突合・照合)

この記事では、エクセルのVLOOKUP関数でデータマッチング(突合・照合)する方法をご紹介します。

「突合」と「照合」は意味が異なるため、それぞれの使い方や意味の違いをご説明します。

以下では、「突合」と「照合」を応用したVBAコードもご紹介しているので、データが大量にある場合などは、VBAで自動化すると効率よく作業することができます。

突合と照合の違いは?

「突合(とつごう)」とは、元になるデータ(原本)と突き合わせて、数字や内容に間違いがないかを確認することを言います。

例えば、書類に記載された住所が住所一覧(原本)に記載されたデータと数字や内容に間違いがないかを突き合わせて確認する時などに使います。

「照合(しょうごう)」とは、2つ以上のデータなどを比較してデータの有無を確認することを言います。

例えば、受験番号が合格者一覧の中にあるかないかを照らし合わせて確認する時などに使います。

エクセルのVLOOKUP関数でデータマッチング(突合・照合)する方法

「突合」と「照合」は意味が異なるので、それぞれの使い方をご紹介します。

エクセルのVLOOKUP関数で突合する方法

突合のデータを用意する

上記のようなデータを用意します。

例ではA列の「十二支(A)」を大元のデータとして、「十二支(B)」のデータと突き合わせて内容に間違いがないかを確かめていきます。

関数を入力する

C2セルに=IF(ISERROR(VLOOKUP(A2, B2, 1, FALSE)), "不一致", "一致")」を入力して、Enterを押します。

上記の数式は、2つのデータを突き合わせて数字や内容が一致している場合は「一致」が表示されて、一致していない場合は「不一致」が表示されます。

IF関数は指定した論理式が「真」か「偽」かを判定します。書式は「=IF(論理式,値が真の場合,[値が偽の場合])」です。

IF関数の使い方などの詳細は、以下の記事でご紹介しています。

ExcelのIF関数の使い方|論理式の条件(IF文)によって処理を分岐

ISERROR関数は、対象の値がエラーであるかどうかを判定します。値がエラーの場合は「TRUE」を返して、エラーではない場合は「FALSE」を返します。書式は「=ISERROR(テストの対象)」です。

ISERROR関数の使い方などの詳細は、以下の記事でご紹介しています。

ExcelのISERROR関数の使い方|セルの値がエラーかどうか判定する

オートフィルする

A2セルの値(例:ねずみ)とB2セルの値(例:ねずみ)は一致しているので、C2セルに「一致」が表示されました。

C2セルのフィルハンドルをドラッグして数式をコピーします。

突合の例

C列に突合の結果が表示されました。

上記の画像の赤字で示したように、内容や文字列が異なる場合は「不一致」が表示されています。

エクセルのVLOOKUP関数で照合する方法

照合のデータを用意する

上記のようなデータを用意します。

例ではA列の「十二支(A)」のデータ群の中に「十二支(B)」のデータがあるかないかを照らし合わせていきます。

関数を入力する

C2セルに=IF(ISERROR(VLOOKUP(B2,$A$2:$A$13,1,FALSE)),"無","有")」を入力して、Enterを押します。

上記の数式は、B2セルの値とA2セルからA13セルの値を照らし合わせて、B2セルの値がある場合は「有」を表示して、ない場合は「無」を表示します。

オートフィルする

B2セルの値(例:うし)は「十二支(A)」内に値が存在するので、C2セルに「有」が表示されました。

C2セルのフィルハンドルをドラッグして数式をコピーします。

照合の例

C列に照合の結果が表示されました。

「十二支(A)」のデータ内に「十二支(B)」のデータがあるかないかを確認することができました。

エクセルのVLOOKUP関数でデータマッチング(突合・照合)を応用したVBAコード

仕様の説明

例では「生徒ID」を照合させて、「請求額」と「入金額」の数値に誤りがないか突合して、「入金確認」に結果を取得します。

「請求額」と「入金額」が同じである場合は、「入金済み」を表示します。

「入金額」が空白である場合は、「未入金」を表示します。

「請求額」と「入金額」に過不足がある場合は、差額を「過剰:¥○○」または「不足:¥○○」と表示します。

Visual Basicを開く

開発タブ、②Visual Basicの順に選択します。

標準モジュールを開く

「Microsoft Visual Basic for Applications」が開きました。

挿入タブ、②標準モジュールの順に選択します。

コードを貼り付ける

「標準モジュール」が開きました。

以下のコードをコピーしてモジュールに貼り付けてください。

Sub 集金管理()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    
    ' ワークシートを指定
    Set ws = ThisWorkbook.Sheets("集金管理") ' シート名を適切なものに変更
    
    ' データの最終行を取得
    lastRow = ws.Cells(ws.Rows.Count, "H").End(xlUp).Row
    
    ' データの最終行までループ
    For i = 2 To lastRow
        Dim invoiceNum As Variant
        Dim lookupRange As Range
        
        ' A列からF列までのデータが入力されているセルまでを取得
        Set lookupRange = ws.Range("A2:F" & i)
        invoiceNum = Application.VLookup(ws.Cells(i, "H").Value, lookupRange, 5, False)
        
        If Not IsError(invoiceNum) Then
            If ws.Cells(i, "I").Value = "" Then
                ws.Cells(i, "J").Value = "未入金"
            Else
                If ws.Cells(i, "I").Value = invoiceNum Then
                    ws.Cells(i, "J").Value = "入金済み"
                Else
                    Dim amountDiff As Double
                    amountDiff = ws.Cells(i, "I").Value - invoiceNum
                    
                    If amountDiff > 0 Then
                        ws.Cells(i, "J").Value = "過剰:" & Format(amountDiff, "Currency")
                    Else
                        ws.Cells(i, "J").Value = "不足:" & Format(Abs(amountDiff), "Currency")
                    End If
                End If
            End If
        Else
            ws.Cells(i, "J").Value = "未入金"
        End If
    Next i
End Sub

上記のコードはA列からF列までのデータが入力されている最終行を自動で取得します。

F列とI列の値が一致する場合は「入金済み」を表示して、VLOOKUP関数で取得したF列の値とI列の値が異なる場合は、I列の値からF列の値を引いて差額を求めます。

また、I列のセルが空白の場合は「未入金」を表示します。

マクロを保存する

作成したマクロを保存します。

ファイルタブ、②上書き保存の順に選択します。

名前を付けて保存する

「名前を付けて保存」ダイアログボックスが表示されました。

保存先(例:デスクトップ)を選択し、②ファイル名(例:集金管理)を入力します。

③ファイルの種類でExcel マクロ有効ブックを選択し、④保存ボタンを押します。

マクロを開く

Excelシートに戻ります。

開発タブ、②マクロの順に選択します。

マクロを実行する

「マクロ」ダイアログボックスが表示されました。

作成したマクロ(例:集金管理)を選択し、②実行ボタンを押します。

結果を表示する

J列に「入金確認」の結果が表示されました。

VLOOKUP関数でデータマッチング(突合・照合)することで、集金の請求額に対して入金額が正しいかどうかが一目で分かります。