VLOOKUPやXLOOKUPなどの検索関数を使っていると、一度は必ず目にするのが「#N/A」というエラー表示です。ここまでの回で紹介してきた検索関数のまとめとして、#N/Aが出る典型パターンと、IFERROR・IFNAを使った対処法を整理して解説します。
#N/Aエラーとは
#N/Aは「Not Available(利用できない)」の略で、検索関数が「探した値が見つかりませんでした」と伝えているだけのエラーです。数式そのものが壊れているわけではなく、検索範囲の中に一致するデータがなかった、というだけのサインです。
VLOOKUP・HLOOKUP・MATCH・XLOOKUPはいずれも、検索値が範囲内に見つからないときにこの#N/Aを返す点が共通しています。
成績管理表での実例:退団選手の名前が選手マスタにない場合
大阪グーニーズでは、選手名・背番号・守備位置をまとめた「選手マスタ」シートを用意し、個人成績シートからVLOOKUPで参照しています。
| 選手名 | 背番号 | 守備位置 |
|---|---|---|
| SUZUKI | 7 | 中堅手 |
| NAKATA | 3 | 一塁手 |
| … | … | … |
ここで、今シーズン途中に退団し、選手マスタから行ごと削除された「YAMAMOTO」という名前が個人成績シートにまだ残っていたとします。この状態でVLOOKUPを組むと、次のようにエラーが出てしまいます。
=VLOOKUP(A2, 選手マスタ!A:C, 3, FALSE) → 結果:#N/A(YAMAMOTOが選手マスタに存在しないため)
これをIFERRORで囲むと、エラー表示の代わりに任意の文字列を表示できます。
=IFERROR(VLOOKUP(A2, 選手マスタ!A:C, 3, FALSE), "未登録")
#N/Aが表示されているセルの数式を確認し、VLOOKUPの部分をそのまま残します。
元の式の前に「=IFERROR(」を追加し、VLOOKUP式全体をカッコの中に入れます。
「, “未登録”)」のように、エラー時に表示したい文字列とカッコの閉じを追加します。
退団選手の行だけ「未登録」と表示され、それ以外の行は今まで通り守備位置が表示されていればOKです。
しくみを理解する:#N/Aが出る典型パターン
- 検索値がそもそも存在しない:退団などで選手マスタ側の行が削除されているケース
- 表記ゆれ:全角/半角の違いや、余分なスペースが入っていて一致しないケース
- 検索範囲のズレ:行や列を挿入・削除した影響で、参照している範囲がもとの位置からずれてしまっているケース
- データ型の食い違い:背番号など数値のつもりの検索値が、片方だけ文字列として入力されているケース
この4パターンのうち、原因を切り分けたいときに役立つのがIFERRORとIFNAの違いです。IFERRORは#N/Aに限らずあらゆる種類のエラーを一律に拾ってしまうのに対し、IFNAは#N/Aだけをピンポイントで拾います。「検索して見つからなかった場合」だけを扱いたいときは、IFNAの方が数式自体の入力ミス(#REF!など)まで一緒に隠してしまう心配がなく安全です。
よくあるミス
検索範囲がズレて起きた#REF!エラーまでIFERRORで「未登録」表示に変換してしまうと、本来直すべき数式のミスに気づけなくなります。エラーが出たら、まず一度は原因を確認してからIFERROR/IFNAで包む習慣をつけると安心です。
全角の「SUZUKI」と半角の「SUZUKI」のように、見た目はほぼ同じでもスプレッドシート上は別の文字列として扱われ、#N/Aになります。IFERRORで隠れてしまうと単なる未登録だと思い込みやすいので、表記が揃っているか一度確認しておくと安心です。
- 検索関数の#N/Aは「検索値の不在」「表記ゆれ」「範囲のズレ」「型の違い」の4パターンで起きることが多い
- IFERRORはすべてのエラーを拾い、IFNAは#N/Aだけを拾うという違いがある
- エラーを表示から消す前に、まず原因を一度確認することで、隠してはいけないミスを見逃さずに済む
次回予告
次回のテーマは「CONCATENATE / &」です。文字列を連結する仕組みを、日付と対戦相手を組み合わせて試合ラベルを自動生成する例で解説していきます。
▶︎ 次回:CONCATENATE / &の使い方としくみ



コメント