[書式] VLOOKUP(<検索したい値>,<対象範囲>,<列番号>,[検索方法])
[機能] 1.[検索方法]に TRUE を指定(もしくは省略)した場合
<検索したい値> 以下の最大値を <対象範囲> の1列目からさがし、
その行の <列番号> 目のセルの値を返します。
<対象範囲> は、必ず1列目が昇順で並べ替えられていなければなりません。
2.[検索方法]に FALSE を指定した場合
<検索したい値> を <対象範囲> の1列目からさがし、その行の <列番号> 目のセルの値を返します。
<対象範囲>の並び順は任意です。
[引数] | <検索したい値> | 検索したい値やセルを指定します。 |
<対象範囲> | 検索対象となる範囲を指定します。この範囲の1列目が検索対象となります。 | |
<列番号> | <検索範囲> の何列目を返したいかを指定します。「1」を指定すると、検索された値そのものが返ります。 | |
[検索方法] | TRUE 、FALSE のいずれかを指定します。省略は TRUE とみなされます。 |
●●● 商品コードの検索には FALSE が必須 ●●●
前回お話しした、4番目の引数が存在しなかった時代には、商品コードなどを扱う検索に
VLOOKUP関数を利用することができませんでした。
それは、次のような理由のためです。
たとえば、間違った商品コードを <検索したい値> として指定した場合、本来ならエラーを
返してもらいたいところです。
ところが、当時は範囲検索専門の関数でしたので、
「前後の近い行の値を返してしまう」
わけです。
これでは商品コードなどの検索には不向きですね。
ということで、4番目の引数が登場。ここに FALSE を指定すれば「完全一致」の検索ができる
ようになったのです。
●●● せっかくの #N/Aエラーですが、見た目がちょっと ●●●
それでは、VLOOKUP関数で FALSE を指定した方法の、代表的な例を見ていきましょう。
たとえば次のようなケースです。
参加者名簿の「学生番号」(A列)を入力することで、学生名簿から検索して「氏名」や「性別」(G列やH列)
の値を自動的に表示したいようなケースです。
![]()
まずこのシートは、<対象範囲> の部分が昇順に並べ替えられていないのが、TRUE のケース
と異なるところです。FALSE の場合、<対象範囲>の並び順は、任意でかまいません。
セルB4 には
=VLOOKUP(A4,$E$4:$H$23,3,FALSE)
セルC4 には
=VLOOKUP(A4,$E$4:$H$23,4,FALSE)
という計算式が入力されています。
そしてそれぞれ、13行目まで、下方向にコピーしてあります。
(蛇足ではありますが、「E4:H23」 は、コピーをしても参照範囲が変わらないように、絶対参照で
「$E$4:$H$23」となっています)
さて、このシートでは、誤った学生番号が入力された「08-9999」の部分(9行目)には、確かに
#N/A
が表示されています。これはOK、意図した通りの結果が得られました。
でもそのかわり、学生番号が入力されていないところにまで #N/Aエラーが表示されています。
予備にもうけた行にまでエラー値が表示されてしまうのは、ちょっと格好が良くないです。
そこで、次に、このエラー値の消し方を考えてみましょう。
●●● エラー値を出さないための基本 ●●●
今回は、もっとも基本的なテクニックでこのエラーを消したいと思います。
(計算式を変えないチカラワザもあるのですが、それは次回。。。)
エラー値を出さない基本は、
「計算元の値が、その関数の動作に適切かどうかを調べて、IF関数で対処」
することです。
このケースでは、次のようになります。
セルB4の計算式を
=IF(ISBLANK(A4),"",VLOOKUP(A4,$E$4:$H$23,3,FALSE))
セルC4の計算式を
=IF(ISBLANK(A4),"",VLOOKUP(A4,$E$4:$H$23,4,FALSE))
というように変えたわけです。
この計算式は、
「もし学生番号がブランクなら、「""」(空白文字列)を、そうでなければVLOOKUPの
計算結果を返しなさい」
という意味です。
これのようにすれば、学生番号に入力がない場所には、きちんと空白が表示されるようになります。
さて、今回はVLOOKUP関数の FALSE の用法と、エラー処理の基本について見てきました。
次回はあえて、基本からちょっとだけはみ出した、チカラワザを紹介する予定です。