Excel関数 逆引き集 | #N/Aのみ捕捉 → IFNA

Excel
スポンサーリンク

概要

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 で包んでみてください。
「見つからないのは優しく扱う」「それ以外のエラーは見逃さない」
という、安定したロジックに一段階レベルアップできます。

タイトルとURLをコピーしました