前項のISERR関数は、VLOOKUP関数で参照範囲に見つからないものは肯定の対象にはなりません。
VLOOKUP関数での未発見は、ISNA関数またはISERROR関数で判定します。
VLOOKUP関数で参照範囲に値が見つかったかどうかの判定は、「
#N/A」になったかで判定できます。
(画像をクリックすると、このページのサンプルがダウンロードできます)
ISNA関数は
NAであるかどうかの判定ですが、実際はその「
ISNA」の中で
VLOOKUP関数を1回書いて、エラーでなければ(否定側処理)、本番の
VLOOKUP関数を行なうことになります。
※
R1C1参照形式の場合は
=IF(ISNA(VLOOKUP(R2C2,マスタ!R1C1:R7C2,2,FALSE)),"???",VLOOKUP(R2C2,マスタ!R1C1:R7C2,2,FALSE))
となります。
Excel2007以降(*.xlsx、*.xlsm)ではIFERROR関数が使えます。
ISNA関数、
ISERR関数、
ISERROR関数での判定ではエラー判定と本番の氏名取得で2回
VLOOKUP関数式を書く必要がありましたが、
Excel2007以降
(*.xlsx、*.xlsm)では
IFERROR関数が追加されたのでこの状況を改善できます。
このように
ISNA関数の記述に比べて式の長さは半分になっていますが、全く同じ動作になります。
※
R1C1参照形式の場合は
=IFERROR(VLOOKUP(R2C2,マスタ!R1C1:R7C2,2,FALSE),"???")
となります。
ISNA関数、
ISERR関数、
ISERROR関数の引数(カッコ内)の
VLOOKUP関数は実際には結果を返さず「検査」としての動作になるのですが、
IFERROR関数の引数(カッコ内)の
VLOOKUP関数は実際に結果を返します。
エラーとなった時はエラー値の「
#N/A」等ではなく第2引数の「???」に置き換わるというものです。
Excel2013以降(*.xlsx、*.xlsm)ではIFNA関数が使えます。
IFERROR関数と全く同様の使い方ができる関数として、
IFNA関数があります。
IFNA関数は「
#N/A」に特化されたもので、他のエラーの場合は「???」にはならずに通常のエラー表示になります。
「
IFERROR関数で良いではないか」と意見される向きもあるかも知れませんが、そもそも元々の
VLOOKUP関数が正しく動作することを確認した上でのエラー処理ですから、
最初から
IFERROR関数を付加させて記述するようだと、他のエラーがあっても「???」が表示されてしまうという問題が発生することがあります。
但し、
IFNA関数は
Excel2013以降の追加関数ですので、
Excel2010までの環境では利用できません。
現在では
Office2010以前はサポート外ですから問題はないはずですが、社内などの運用環境は確認する必要があります。
※
R1C1参照形式の場合は
=IFNA(VLOOKUP(R2C2,マスタ!R1C1:R7C2,2,FALSE),"???")
となります。