- 公開日:
エクセルの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の順に選択します。
「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で自動化すると数式の確認がしやすくなります。