VLOOKUP関数の落とし穴
Excelで使い勝手の良いVLOOKUP関数は、多くのデータの中からピンポイントで検索した値に対応する値を返してくれますが、実は使い方を間違えると存在するにも関わらず絶対に値が返ってこない場合があります。
ここではどのような時にそうなるのか、そしてそれを回避する方法を説明したいと思います。
VLOOKUPは重複データを見逃す!?
VLOOKUP関数は、「対応表」からほしい項目のデータを呼び出すときに使います。ただし「対応表」はVLOOKUP用として作られているというよりも、どちらかというとメインデータとして使っていて、そこから該当する値を持ってくることが多いかもしれません。
■例1:海外支店管理表
【解説】
ごく普通の表です。ここでは分かりやすくするために行数を短くしていますが、実際にはVLOOKUP関数などを使う場合、縦長の表が多く画面に入りきらない場合を想定しています。
(その方がより気づきにくいので注意が必要になります)
■例2:VLOOKUP関数を設定する
ここでVLOOKUP関数を使って、支店名に該当する支店コードを抽出できるようにします。
例えば
検索値:ニューヨーク → A-001が表示
検索値:大連 → A-003が表示
となる表示結果を求めたいとします。
■例3:実際に値を入力し関数の戻り値を表示
セルF3に「ニューヨーク」と入力すると期待通りの結果が返ってきました。
次に「上海」と入力します。
■例4:支店名「上海」で検索
同じように「A-004」の支店コードが返ってきました。
しかし何かが違います。
ここでもう一度この表全体を見たいと思います。
ご覧のように支店名の「上海」は同じ列(B列)に2つあります。この場合が大きな問題です。
つまり、このような「同じ列に同じ値が2個以上ある」場合、2つ目の値は返ってきません。ということは「A-006」の値が表示されることは起こり得ないのです。
VLOOKUPの仕様として(未確認ですが)指定された検索文字を上から探しにいき、見つかった時点で、それに対応する値を返し検索作業はそこで終了します。
対策は事前にユニーク(同じ値が存在しない)かどうか確認
VLOOKUP関数のこの問題(仕様)を回避するには、この関数を設定する前に予め検索対象となる列がユニークかどうかを確認しておく必要があります。
今回の例のように表が短いとすぐに判断できますが、縦長で細かいデータが羅列されている場合は「COUNTIF」関数などを使うことで1つかどうか確認できます。
この表のように複数ある場合は、以下のように対応します。
上海を「上海1」、「上海2」にする。
そしてVLOOKUP関数で検索するときに「上海1」あるいは「上海2」で検索します。