• 公開日:

エクセルのVLOOKUP関数で2つのシートの重複を抽出する

この記事では、エクセルのVLOOKUP関数で2つのシートの重複を抽出する方法をご紹介します。

VLOOKUP関数はほかの関数を組み合わせることで、重複を確認するだけでなく指定した文字列や記号を返すことができます。

以下では、VBAコードで自動化する方法と数式を直接入力する方法をご紹介します。

エクセルのVLOOKUP関数で2つのシートの重複を抽出する方法

重複したデータがあるかチェックする

例では「第2回研修」シートと「第1回研修」シートを比較して、「第1回研修」シートに社員IDがある場合は「参加済み」を表示して、ない場合は「未参加」をD列に表示します。重複を確認することで、第2回研修の参加対象が誰なのかが一目で分かります。

D列に数式を直接入力する場合は、「数式を入力して2つのシートの重複を抽出する方法」セクションを参考にしてください。

ただし、2つのシートを参照する場合は操作ミスの原因にもなるため、VBAで自動化したい場合は「VBAで自動化して2つのシートの重複を抽出する方法」を参考にしてください。

数式を入力して2つのシートの重複を抽出する方法

数式バーに数式を直接入力していきますが、検索値や範囲を手動で入力するとミスの原因にもなるので、セルを選択するようにしましょう。

関数を入力して検索値を選択する

①D2セルに=IF(ISERROR(VLOOKUP(」を入力します。

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

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

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

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

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

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

検索値(例:A2セル)を選択してカンマで区切ります。

シートを移動して範囲を選択する

「第1回研修」シートに移動します。この際数式バーに自動で「第1回研修!」が入力されます。

VLOOKUP関数の範囲(例:A2セルからA8セル)を選択して、$でセル番地を固定してからカンマで区切ります。

範囲選択してからF4を1回押すと、セルを固定することができます。

列番号を選択する

カンマに続いて、数式バーに1,」を入力して列番号を指定します。

検索方法を選択する

カンマに続いて、数式バーにFALSE)),」を入力して検索方法を指定します。

重複の有無で表示する文字列を指定する

表示する文字列を指定します。

カンマに続いて数式バーに"未参加","参加済み")」を入力して、Enterを押します。

重複するデータがある場合は「参加済み」を表示して、重複するデータがない場合は「未参加」を表示します。

オートフィルする

検索値(例:1001)は重複しているので、「第2回研修」シートのD2セルに「参加済み」が表示されました。

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

結果が表示された

D列に2つのシートの重複を抽出することができました。

「参加済み」と表示されているのが重複しているデータです。

VBAで自動化して2つのシートの重複を抽出する方法

開発タブを表示させる

以下では、VBAコードを使用して2つのシートの重複を抽出するので、上記の画像の赤矢印で示した「開発」タブが表示させているかを確認してください。

表示されていない場合は、以下の記事で「開発タブ」を表示する方法をご紹介しています。

エクセルの開発タブを表示する方法

Visual Basicを開く

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

標準モジュールを開く

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

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

コードを貼り付ける

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

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

Sub エクセルのVLOOKUP関数で2つのシートの重複を抽出する()
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim lookupValue As Range
    Dim lastRow1 As Long
    Dim lastRow2 As Long
    Dim currentRow As Long
    
    ' シート名を指定
    Set ws1 = ThisWorkbook.Sheets("第2回研修")
    Set ws2 = ThisWorkbook.Sheets("第1回研修")
    
    ' A2セルからC列の最終行まで繰り返し
    lastRow1 = ws1.Cells(ws1.Rows.Count, "C").End(xlUp).Row
    Set lookupValue = ws1.Range("A2:A" & lastRow1)
    
    ' 「第1回研修」シートの最終行を求める
    lastRow2 = ws2.Cells(ws2.Rows.Count, "A").End(xlUp).Row
    
    For currentRow = 1 To lookupValue.Rows.Count
        ' VLOOKUP関数とISERROR関数を組み合わせてセルに設定
        ws1.Cells(currentRow + 1, "D").formula = "=IF(ISERROR(VLOOKUP(A" & (currentRow + 1) & ", '第1回研修'!A2:A" & lastRow2 & ", 1, FALSE)), ""未参加"", ""参加済み"")"
    Next currentRow
End Sub

上記のコードは、「第1回研修」シートの社員IDと「第2回研修」シートの社員IDが重複している場合は、「第2回研修」シートのD列に「参加済み」を表示して、重複していない場合は「未参加」を表示します。

最後の数式で指定する「""未参加"", ""参加済み"")"」は、ダブルクォーテーション内を任意の文字列や○×などに指定することが可能です。

マクロを保存する

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

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

保存先を選択する

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

保存先(例:デスクトップ)を選択し、②ファイル名(例:エクセルのVLOOKUP関数で2つのシートの重複を抽出する)を入力します。

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

マクロを開く

Excelシートに戻ります。

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

作成したマクロを実行する

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

作成したマクロ(例:エクセルのVLOOKUP関数で2つのシートの重複を抽出する)を選択し、②実行ボタンを押します。

結果が表示された

D列に結果が表示することができました。

2つのシートを参照している場合、引数の間違いに気が付きにくいため、VBAで自動化すると数式の確認がしやすくなります。