2/09/2017

Excel。アレレ?VLOOKUP関数の弱点!このような範囲では太刀打ちできない

Excel。アレレ?VLOOKUP関数の弱点!このような範囲では太刀打ちできない

<VLOOKUP&INDEX+MATCH関数>


まずは、次のような表があります。

6行目から従業員リストがあるとしまして、
B3に従業員コードを入力すると、C3に従業員名が表示されるという、
見た目、ベタベタなというか、VLOOKUP関数で、

”楽勝”と思えるような表なのですが、

実は、コレ。

VLOOKUP関数の弱点というか、
6行目からの従業員リストの作り方がなっていないというか、
これでは、VLOOKUP関数で算出することが出来ないのです。

百聞は一見に如かず。

VLOOKUP関数で算出してみましょう。

まずは、B3に従業員コードSM001というダミーデータを入力して、
C3をクリックしてVLOOKUP関数ダイアログボックスを表示します。

検索値には、B3
範囲には、A7:D11
列番号は、従業員名は、範囲の左から2列目にありますので、2
検索方法は、完全一致なので、FALSE。または、0ですね。

では、OKボタンをクリックしてみましょう。
すると、結果は…#N/A

なんで!とお思いでしょうけど、このように算出できないのです。

原因は、従業員リストにあります。

VLOOKUP関数で抽出するには、
抽出する値が検索値より【右側】になければ抽出することが出来ないのです。

要するに、次のような従業員リストだったら、よかったのです。


しかし、現実的に、このような順番に出来ない場合はどうしたらいいのでしょうか?

そこで登場するのが、
MATCH関数で検索値を見つけてINDEX関数で抽出する、

INDEX+MATCH関数のコンビネーションなのです。


まず、MATCH関数の動きを確認したほうがわかりやすいので、
D3にMATCH関数を作ってみましょう。

D3をクリックして、MATCH関数ダイアログボックスを表示します。

検索値には、B3
検査範囲には、D7:D11
照合の種類には、完全一致なので、0

そして、OKボタンをクリックしましょう。

このMATCH関数を使うと、リストの何番目にデータがあるのかがわかるようになります。

D3の数式は、

=MATCH(B3,D7:D11,0)


この算出された数値をINDEX関数で使って、抽出しようというわけです。

では、C3をクリックして、INDEX関数ダイアログボックスを表示しましょう。

INDEX関数は、2通りの引数を持つ特殊な関数ですが、

今回は行番号があればいいので、どちらでもOKなので、

配列.行番号.列番号を選んでOKボタンをクリックします。

配列には、B7:B11
行番号には、先程MATCH関数で算出したD3を使います。

OKボタンをクリックします。

C3の数式は、

=INDEX(B7:B11,D3)


これで、抽出することが出来ましたね。

このように、VLOOKUP関数の弱点というか、
範囲の表の作りによっては、VLOOKUP関数が使えないケースがありますので、
INDEX+MATCH関数を覚えておくといいかもしれませんね。

なお、C3の数式を、

=INDEX(B7:B11,MATCH(B3,D7:D11,0))

とネストにしてもOKですね。