【Microsoft EXCEL】VLOOKUPではできない検索値の左側にある列の値を取得する数式をMATCHとINDEX、INDIRECTで自作
EXCELのVLOOKUPは与えた検索値を指定範囲から探し出して、指定した列番号の位置の値を取得する関数である
例えば以下↓のようなシート
A | B | C | |
1 | SEX | NAME_ID | NAME |
2 | 男 | A | Aさんです。 |
3 | 女 | B | Bさんです。 |
4 | 男 | C | Cさんです。 |
5 | IDを入力⇒ | ※ |
があったとき、B2:C4までを検索範囲として
A | B | C | |
1 | SEX | NAME_ID | NAME |
2 | 男 | A | Aさんです。 |
3 | 女 | B | Bさんです。 |
4 | 男 | C | Cさんです。 |
5 | IDを入力⇒ | ※ |
C5セル(※のセル)に以下のVLOOKUP関数を記述
=vlookup(B5,B2:C4,2,false)
と入力すると、
「B5セルに与えた検索値をもとにB2:C4セルまでを検索して引っかかった行の2番目のセルを取得」するという指示になる。
よってB5セルに「A」と入力すれば「Aさんです。」という値が取得できるし
「C」と入力すれば「Cさんです。」という値が取得できる。
(こんな使い方はその辺ググれば出てくるがこの話の前段として…)
ただ、VLOOKUPは与えた検索値をもとにして右方向にしか検索できないので、
指定範囲内における検索値を持った列は一番左側の列に位置している必要がある。
よってこの例でいうと、「A」と与えたら列名「NAME_ID」の列より右側、列名でいうと「NAME」の項目しか取得できない。
つまり、「NAME_ID」より左側にある「SEX」の値を「NAME_ID」の検索値からは取得することが出来ない。
例えば以下のような検索範囲
A | B | C | |
1 | SEX | NAME_ID | NAME |
2 | 男 | A | Aさんです。 |
3 | 女 | B | Bさんです。 |
4 | 男 | C | Cさんです。 |
5 | IDを入力⇒ | ※ |
において、C5セルに以下のVLOOKUP関数を記述
=vlookup(B5,A2:B4,0,false)
と入力してB5セルに「A」と入力しても、「男」という値は取得できない。
これは「A」で検索して引っかかった行の1つ左側のセルの値を取得しろ(つまり「SEX」列の値を取得しろ)という指示として無理矢理記述しているが
逆方向への検索にVLOOKUPが対応していないので、#N/Aになってしまう。(第三引数が1以上でないと関数が受け付けない)
ここまでが前置き。
要するに単純なVLOOKUPでは右側への検索しかできない。
検索値より左側にある列の値は、事前に右側にコピペしておくか、数式で参照させるなどして、
とにかく検索値より右側にしないとVLOOKUPでは検索できないのである。
これを、検索値より左側にある値をそのままにして、MATCHやINDEX、INDIRECTを使って検索する方法を実現する。