概要
VLOOKUP や MATCH を使っているときに出るエラーの代表格が #N/A です。
- 検索値が見つからない →
#N/A - それ以外のミス(範囲のズレ、書式違いなど) →
#REF!や#VALUE!など別のエラー
ここで大事なのは、
「見つからない(#N/A)だけは穏やかに処理したい。
でも本当にバグっているエラーは気付きたい」
という場面が多いことです。
その「#N/A だけを捕まえて別の値に置き換える」ための関数が IFNA です。
同じ「エラー処理」の仲間である IFERROR との違いを意識しながら見ていきましょう。
IFNA の基本
書式と動き
IFNA の書式はとてもシンプルです。
=IFNA(値, #N/Aのときに返す値)
動きはこうです。
- 「値」が
#N/Aのとき → 「#N/Aのときに返す値」を返す - 「値」が
#N/A以外(正常な値 or 他のエラー)のとき → そのまま結果を返す
ポイントはここです。
#N/Aだけをやさしく捕まえる- それ以外のエラー(
#DIV/0!や#VALUE!など)は あえてそのまま出す
つまり、
「検索で見つからないのは想定内。でもそれ以外のエラーは不具合なので気づきたい」
というときに、IFERROR よりも IFNA の方が安全 です。
VLOOKUP + IFNA の定番パターン
見つからないときだけ「なし」と表示する
A2:検索値
D2:E10:検索表
元の VLOOKUP はこうです。
=VLOOKUP(A2, $D$2:$E$10, 2, FALSE)
A2 が D2:D10 に存在しないと #N/A になります。
これを IFNA で包んで、「見つからないときだけ『なし』」に変えます。
=IFNA(
VLOOKUP(A2, $D$2:$E$10, 2, FALSE),
"なし"
)
動きはこうなります。
- 該当データがある → 通常通り、VLOOKUP の結果を返す
- 該当データがない(
#N/A) → 「なし」と表示 - もし範囲指定ミスなどで別エラーになったら → そのままエラー表示(気付ける)
IFERROR だと「どんなエラーも“なし”にしてしまう」ので、
バグに気づきにくくなります。
VLOOKUP や MATCH では「まず IFNA を優先」がおすすめです。
MATCH + IFNA で「存在しない」をきれいに表示
「位置が見つからない」→「該当なし」にする
MATCH も、見つからないと #N/A になります。
=MATCH(A2, $D$2:$D$10, 0)
これを IFNA で包むと:
=IFNA(
MATCH(A2, $D$2:$D$10, 0),
"該当なし"
)
- A2 がリスト内にあれば → 位置(1〜…)を返す
- A2 がリスト内になければ → 「該当なし」
- MATCH の書式ミスなどは → そのまま別エラーとして出る
「見つからないのは想定内。でも式のバグは見逃したくない」
というロジックにちょうどぴったりはまります。
IFERROR との違いと使い分け
IFERROR は「全エラー対応」、IFNA は「#N/A 限定」
IFERROR:
=IFERROR(値, エラーのときに返す値)
これは、#N/A だけでなく、#DIV/0!, #VALUE!, #REF! など すべてのエラー をまとめて握りつぶします。
一方 IFNA は #N/A だけです。
=IFNA(値, #N/Aのときに返す値)
なので、
- VLOOKUP / MATCH / XLOOKUP の「見つからない(
#N/A)」に対処したい → IFNA を使う - 割り算や他の計算で、とにかくどんなエラーも表示したくない → IFERROR を使う
という切り分けがおすすめです。
IFNA で「予備ルート検索」をする
見つからなければ別の表を参照する
A2:検索値
まず D2:E10 を見て、なければ G2:H10 を見る、という 2 段階検索の例です。
=IFNA(
VLOOKUP(A2, $D$2:$E$10, 2, FALSE),
VLOOKUP(A2, $G$2:$H$10, 2, FALSE)
)
動きはこうです。
- A2 が D2:D10 にあれば → そちらの結果を返す
- D 側にない(
#N/A) → G2:H10 の VLOOKUP を試す - どちらにもない → G 側も
#N/Aなので、最終的に#N/Aのまま(気付ける)
これも、IFERROR ではなく IFNA を使うことで、
「書式ミスなど本来気づきたいエラー」は隠さずに済みます。
例題
問題1
A2 に検索値、D2:E10 に検索表があり、VLOOKUP(A2, $D$2:$E$10, 2, FALSE) を使っています。
検索値が見つからず #N/A になるときにだけ「なし」と表示し、
それ以外のエラーはそのまま出すように、IFNA を使って書き直してください。
=IFNA(
VLOOKUP(A2, $D$2:$E$10, 2, FALSE),
"なし"
)
問題2
A2 の値を MATCH(A2, $D$2:$D$10, 0) で検索しています。
見つからないとき #N/A の代わりに「該当なし」と表示し、
それ以外のエラーはそのまま表示するように、IFNA を使った式を書いてください。
=IFNA(
MATCH(A2, $D$2:$D$10, 0),
"該当なし"
)
問題3
VLOOKUP(A2, $D$2:$E$10, 2, FALSE) で商品名を取得しています。
商品コードがマスタに存在しないときは「未登録」と表示し、
その他のエラーはそのまま出るようにしたいです。
IFNA を使った式を書いてください。
=IFNA(
VLOOKUP(A2, $D$2:$E$10, 2, FALSE),
"未登録"
)
問題4
A2 の商品コードを、まず D2:E10 から VLOOKUP し、#N/A(見つからない)場合だけ、G2:H10 を参照して再度 VLOOKUP したいです。
IFNA を使って 2 段階検索を行う式を書いてください。
=IFNA(
VLOOKUP(A2, $D$2:$E$10, 2, FALSE),
VLOOKUP(A2, $G$2:$H$10, 2, FALSE)
)
問題5
MATCH(A2, $D$2:$D$10, 0) の結果を使って別計算をしたいが、
A2 がリストに存在しない場合(#N/A)は 0 を返したいとします。
IFNA を使って、リストに存在すれば位置(1〜)を返し、存在しなければ 0 を返す式を書いてください。
=IFNA(
MATCH(A2, $D$2:$D$10, 0),
0
)
まとめ
「#N/A のみ捕捉 → IFNA」は、エラー処理の中でもかなり重要なテクニックです。
- 検索で「見つからない」のは想定内 → きれいなメッセージや代替値に差し替え
- 本当におかしいエラー(書式・範囲・計算のミス)は → あえて残して気づけるようにする
そのための形は、これだけ覚えれば十分です。
=IFNA(検索系の式, 見つからないときに返すもの)
VLOOKUP や MATCH を使っているところを、一度 IFERROR ではなく IFNA で包んでみてください。
「見つからないのは優しく扱う」「それ以外のエラーは見逃さない」
という、安定したロジックに一段階レベルアップできます。
