ExcelのVLOOKUP関数で複数列の値を抽出したい
Microsoft Excelで使用できるVLOOKUP関数で、複数列の値を抽出したいと思ったことはありませんか?データの抽出を行うことのできるVLOOKUP関数を使用して、複数列の値を一度に抽出したいというシーンもあるかと思います。
しかし、VLOOKUP関数では複数列の抽出に対応していません。複数列の値を抽出したいのであれば、複数列の抽出に対応しているXLOOKUP関数を使用したほうがいいのです。しかしどうしてもVLOOKUP関数と同様の処理で複数列の値を抽出したいという場合は、マクロを用いてみましょう。この記事では、ExcelのVLOOKUP関数で複数列の値を抽出する方法をご紹介していきます。
ExcelのVLOOKUP関数で複数列の値を抽出する方法
それでは、ExcelのVLOOKUP関数で複数列の値を抽出する方法を説明していきます。冒頭で説明している通り複数列の値を抽出したいのであればXLOOKUP関数を使用したほうがいいのですが、Excelのバージョンが2019以前の場合はXLOOKUP関数が実装されていないため使用することができません。この場合は、マクロを使用してXLOOKUP関数と同様の処理を行わせましょう。
マクロを作成して処理を行うわけですが、Excelでは「開発」タブがデフォルトでは表示されていません。開発タブが表示されていない方は、下記リンク先の記事を参考にして開発タブを表示しましょう。
Sub VLOOKUP関数と同様の結果を取得_複数列出力() Dim strSerchRange As Variant Dim strSerchKeys As Variant Dim strSerchResults As Variant Dim strSerchResultsRange As String Dim arrColNums As Variant Dim i As Integer Dim j As Integer Dim l As Integer '検索値の範囲を指定する strSerchKeys = Range("G2:G12") '検索結果出力先を指定する。※2つ以上の場合は列を変更する。隣り合わせの列のみ指定可能。 strSerchResultsRange = "I2:K12" '検索対象セルを範囲指定する。なお、1列目が主キーになるようにする。 strSerchRange = Range("A2:D7") '検索結果に出力する複数の列番号を指定する。 arrColNums = Array(2, 3, 4) '値のみをクリアする。 Range(strSerchResultsRange).ClearContents '検索結果用の配列を作成する。 strSerchResults = Range(strSerchResultsRange) '配列に格納された値すべてを対象に処理する。 For i = LBound(strSerchRange, 1) To UBound(strSerchRange, 1) For j = LBound(strSerchKeys, 1) To UBound(strSerchKeys, 1) '検索キーと表の主キーがマッチしているか確認する。 If strSerchRange(i, 1) = strSerchKeys(j, 1) Then '検索結果を配列へ格納します。同時に指定列番号分の値も格納します。 For k = LBound(arrColNums) To UBound(arrColNums, 1) strSerchResults(j, k + 1) = strSerchRange(i, arrColNums(k)) Next End If 'マッチしない場合代わりの値を格納する。 If strSerchResults(j, 1) = "" Then For k = LBound(arrColNums) To UBound(arrColNums, 1) strSerchResults(j, k + 1) = "該当なし" Next End If Next Next '配列に格納した検索結果を指定Rengeへ出力する。 Range(strSerchResultsRange) = strSerchResults End Sub