- 公開日:
エクセルの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の順に選択します。

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