ExcelのVLOOKUP関数で複数列の値を抽出する方法!

ExcelのVLOOKUP関数で複数列の値を抽出する方法!

Microsoft Excelで使用できるVLOOKUP関数で、複数列の値を抽出したいと思ったことはありませんか?複数列の抽出を行う方法は、特殊なものになります。この記事では、ExcelのVLOOKUP関数で複数列の値を抽出する方法をご紹介しています。


目次[非表示]

  1. ExcelのVLOOKUP関数で複数列の値を抽出したい
  2. ExcelのVLOOKUP関数で複数列の値を抽出する方法

ExcelのVLOOKUP関数で複数列の値を抽出したい

Microsoft Excelで使用できるVLOOKUP関数で、複数列の値を抽出したいと思ったことはありませんか?データの抽出を行うことのできるVLOOKUP関数を使用して、複数列の値を一度に抽出したいというシーンもあるかと思います。

しかし、VLOOKUP関数では複数列の抽出に対応していません。複数列の値を抽出したいのであれば、複数列の抽出に対応しているXLOOKUP関数を使用したほうがいいのです。しかしどうしてもVLOOKUP関数と同様の処理で複数列の値を抽出したいという場合は、マクロを用いてみましょう。この記事では、ExcelのVLOOKUP関数で複数列の値を抽出する方法をご紹介していきます。

ExcelのVLOOKUP関数で複数列の値を抽出する方法

それでは、ExcelのVLOOKUP関数で複数列の値を抽出する方法を説明していきます。冒頭で説明している通り複数列の値を抽出したいのであればXLOOKUP関数を使用したほうがいいのですが、Excelのバージョンが2019以前の場合はXLOOKUP関数が実装されていないため使用することができません。この場合は、マクロを使用してXLOOKUP関数と同様の処理を行わせましょう。

アイテム、価格、ショップ、デザインの表
使用するデータは、画像のものになります。
画像例の表に「価格」・「ショップ」・「デザイン」の各列の値を抽出
そして、こちらの画像例の表に「価格」・「ショップ」・「デザイン」の各列の値を一度に抽出していきます。

マクロを作成して処理を行うわけですが、Excelでは「開発」タブがデフォルトでは表示されていません。開発タブが表示されていない方は、下記リンク先の記事を参考にして開発タブを表示しましょう。

Excelの開発タブを表示する方法を紹介!

Microsoft Officeの表計算ソフト・Excelで、VBAやマクロの作成・操作・実行を行いたいのに「開発タブ」が表示されていなくて困ってしまったことはありませんか?この記事では、Excelの開発タブを表示する方法をご紹介しています。

Thumb
「Visual basic」をクリック
ウィンドウ上部に表示された「開発」タブをクリックしてリボンメニューを開き、「コード」項目の「Visual basic」をクリックしましょう。
「Microsoft Excel Object」を右クリックしてメニューの「挿入」→「標準モジュール」をクリック
Visual Basicのウィンドウが表示されるので、左側メニューの「Microsoft Excel Object」を右クリックしてメニューの「挿入」→「標準モジュール」をクリックしましょう。
コードの入力が完了したら、「実行」ボタンをクリック
これでコードの入力欄が表示されるので、下記のコードを入力します。使用する環境によって、各条件を変更してくださいね。コードの入力が完了したら、「実行」ボタンをクリックしましょう。
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
VLOOKUP関数で複数列の値を抽出できた
これで、マクロを使用して実質的にVLOOKUP関数で複数列の値を抽出することができますよ。

関連記事