VLOOKUPで見つからなかったら「???」を表示する

前項のISERR関数は、VLOOKUP関数で参照範囲に見つからないものは肯定の対象にはなりません。 VLOOKUP関数での未発見は、ISNA関数またはISERROR関数で判定します。
VLOOKUP関数で参照範囲に値が見つかったかどうかの判定は、「#N/A」になったかで判定できます。

VLOOKUPのエラー判定
(画像をクリックすると、このページのサンプルがダウンロードできます)

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関数が追加されたのでこの状況を改善できます。

VLOOKUPのエラー判定

このようにISNA関数の記述に比べて式の長さは半分になっていますが、全く同じ動作になります。

R1C1参照形式の場合は

 =IFERROR(VLOOKUP(R2C2,マスタ!R1C1:R7C2,2,FALSE),"???")
となります。
ISNA関数、ISERR関数、ISERROR関数の引数(カッコ内)のVLOOKUP関数は実際には結果を返さず「検査」としての動作になるのですが、IFERROR関数の引数(カッコ内)のVLOOKUP関数は実際に結果を返します。 エラーとなった時はエラー値の「#N/A」等ではなく第2引数の「???」に置き換わるというものです。

Excel2013以降(*.xlsx、*.xlsm)ではIFNA関数が使えます。
IFERROR関数と全く同様の使い方ができる関数として、IFNA関数があります。

VLOOKUPのエラー判定

IFNA関数は「#N/A」に特化されたもので、他のエラーの場合は「???」にはならずに通常のエラー表示になります。
IFERROR関数で良いではないか」と意見される向きもあるかも知れませんが、そもそも元々のVLOOKUP関数が正しく動作することを確認した上でのエラー処理ですから、 最初からIFERROR関数を付加させて記述するようだと、他のエラーがあっても「???」が表示されてしまうという問題が発生することがあります。

但し、IFNA関数はExcel2013以降の追加関数ですので、Excel2010までの環境では利用できません。 現在ではOffice2010以前はサポート外ですから問題はないはずですが、社内などの運用環境は確認する必要があります。

R1C1参照形式の場合は

 =IFNA(VLOOKUP(R2C2,マスタ!R1C1:R7C2,2,FALSE),"???")
となります。