2010/04/30

VLOOKUPで#N/Aエラーを表示させない

VLOOKUP関数を使うと、縦型の表からデータを探すことができます。(横型の検索はHLOOKUP関数)
関数の書式は以下のとおりです。

= VLOOKUP(検索値,検索する範囲,列番号,検索の型)

画像は、A1~C8の表からデータを探す例です。E2セルに任意のIDを入れると、F2とG2セルに該当のデータが表示されるようになっています。

具体的には、F2セルには"=VLOOKUP($E$2,$A$2:$C$8,2,FALSE)"が、G2セルには"=VLOOKUP($E$2,$A$2:$C$8,3,FALSE)"が挿入されています。F2とG2では列番号のみが異なり検索値と範囲は同じなので、F2で絶対参照の式にして、G2にコピーしています。

関数の書式について補足すると、検索値は例のようにセルを指定しても、直接、文字で指定してもOKです。(文字で指定する場合は、"検索したい文字"のように、" " で囲みます。)検索する範囲は任意の範囲が指定できますが、VLOOKUP関数は左端の列を検索するので検索値が左端に含まれるように指定します。

列番号は検索したいデータの列番号を指定します。検索の型は、TrueとFalseが指定できますが、Trueを指定するとデータが見つからなかった場合に、そのデータを超えない最大値を検索して代わりに表示するので、Falseを指定するケースがほとんどだと思います。

VLOOKUP関数の大まかな使い方は以上のとおりですが、検索値が空白の場合は、↓のように#N/Aエラーが表示されます。

この場合、F2セルの式を"=IF(E2="","",VLOOKUP($E$2,$A$2:$C$8,2,FALSE))"(E2が空白であれば空白を返して、そうでなければ"VLOOKUP($E$2,$A$2:$C$8,2,FALSE)"を返す)とすれば、検索値が空白の場合に#N/Aエラーが出るのは防ぐことができます。しかし、これだけでは"X008"のように検索値が検索範囲に含まれないケースには対応できません。

この#N/Aエラーが表示される二つのケースをカバーする為には、ISERROR関数を使います。

結論を書くと、F2セルには"=IF(ISERROR(VLOOKUP($E$2,$A$2:$C$8,2,FALSE)),"",VLOOKUP($E$2,$A$2:$C$8,2,FALSE))"、G2セルには"=IF(ISERROR(VLOOKUP($E$2,$A$2:$C$8,3,FALSE)),"",VLOOKUP($E$2,$A$2:$C$8,3,FALSE))"と指定します。

これは、VLOOKUP関数の結果をISERROR関数でエラー表示か判定して、#N/Aエラーを表示させないようにしています。この方法であれば、検索値が空白の場合も指定した検索値が範囲に含まれない場合もエラーが表示されなくなるのでGoodです。

式が長いので嫌になる方もいると思いますが、"VLOOKUP($E$2,$A$2:$C$8,2,FALSE)"の部分を"検索"というキーワードに置き換えてみると、そこまで難しくないのが分かります。(検索の式がISERROR関数でエラーになれば空白を返して、そうでなければ検索の結果を返しています。)

=IF(ISERROR(検索),"",検索)

なお、Excel 2007では、IFERROR関数が追加されていて、"=IFERROR(VLOOKUP($E$2,$A$2:$C$8,3,FALSE,"")"とすればOKです。

0 件のコメント:

コメントを投稿