VLOOKUP関数の落とし穴
ある値を検索値としてリストから抽出する作業にはVlookup関数が大活躍します。
しかし便利な反面、手の届かないこともあります。
以前の記事では2番目以降のデータを取得する方法をご紹介しました。
他にも「選択範囲の左端の値しか検索値に使えない」という弱点があります。
取得したい返り値が検索値の右側にあることが前提というわけです。
もし左側にあった場合は列を入れ替える必要がありますが、元データを操作することになります。
場合によっては元データが編集できないこともあります。
そこで今回は、元データに手を加えずに左端以外の値を検索値として取得する方法をご紹介します。
VLOOKUP関数では不可能ですが、MATCH関数とINDEX関数を組み合わせることで実装できます。
左端以外を検索値として値を取得
データの用意
今回は次のようなデータを用意しました。
こちらの元データから、次のような部品を抽出したリストを作成することを目的とします。
ポイントは元データのD列にある「発注ID」を検索値として、B列の「品番」を取得することです。
使用する関数
前述のとおりVlookup関数では限界があります。
INDEX関数とMATCH関数という2つの関数を組み合わせることで実現可能となります。
=INDEX(部品リスト!$B$3:$E$8,MATCH(B3,部品リスト!$D$3:$D$8,0),1)
あとはオートフィルで一気に取得可能です。
関数のおさらい
まずは実現方法を紹介しました。詳細をご説明します。
MATCH関数の使い方
第1の関数はMATCH関数です。
あるセルの値を検索値として、そのセルが何番目にあるかを返します。
例としてMATCH関数だけで表示させた場合の結果を示します。
検索値「80050」は指定した範囲「D3:D8」内の1番目である「D3」のセルにあるので返り値は「1」です。
INDEX関数の使い方
2番目の関数がINDEX関数です。
配列を指定した上で、特定の列・行にあるセルの値を返します。
INDEX関数のみを使用した例を示します。
指定した範囲「B3:E8」の中で3列・1行目の値である「B5」の値である「T802-01」が返り値です。
まとめ
- Vlookup関数は指定範囲内左端の値しか検索値にできない
- INDEX関数とMATCH関数を組み合わせることで実現可能