🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

ExcelのIFERROR関数 — バグを隠さずにエラーを受け止める(IFERROR vs IFNA)

|

ExcelのIFERROR関数 — バグを隠さずにエラーを受け止める(IFERROR vs IFNA)

要点IFERROR(formula, value_if_error) は数式を実行し、エラーになったら 代わりにフォールバックを返します:=IFERROR(A2/B2, 0)。何時間も人を泣かせる 落とし穴:IFERROR はあらゆる種類のエラーを捕まえる——#REF!#NAME?#VALUE!#DIV/0!、すべてです——だから、想定したエラーと一緒に本物のバグ (列の削除、関数名の打ち間違い)まで平気で隠します。一致が見つからないかも しれないルックアップには、代わりに IFNA を使う:#N/A だけを捕まえ、 本物のエラーは表に出させます。さらに良いのは、新しいルックアップでは XLOOKUP 内蔵の if_not_found を使うこと。 IFERRORIFNA はどちらも Excel 2013 以降が必要です。

=IFERROR(A2/B2, 0)                          ' B2 が 0 か空白 -> #DIV/0! の代わりに 0
=IFNA(XLOOKUP(A2, Ids, Names), "Not found")  ' 一致なしのときだけ捕まえる

IFERROR は、セルにエラーを見た瞬間に人が手を伸ばす関数です——そしてその反射こそが まさに問題です。うまく使えばモデルを頑丈にし、覆いとして使えば、スプレッドシートを 見た目はきれいなのに静かに嘘をつくものに変えます。本記事は1つの強いおすすめを軸に 据えます:想定したエラーだけを受け止め、あらゆるエラーを受け止めない。

この記事で学べること

  • 考え方の軸:IFERROR安全網であって、修理ではない
  • アンチパターン:すべてを IFERROR で包むと本物のバグが隠れる
  • なぜルックアップにはたいてい IFNA が正しい道具なのか
  • 古い IF(ISERROR(…)) パターンの性能の罠
  • 集計を汚さないフォールバック値の選び方
  • なぜ XLOOKUPif_not_foundIFERROR をしばしば不要にするのか

考え方の軸:安全網であって、修理ではない

IFERROR はエラーを防ぐのではありません——数式がすでに失敗したに 受け止めて、別のものを返します。

' 「A2/B2 を計算する。もし破綻したら、代わりに 0 をくれ」
=IFERROR(A2/B2, 0)

綱渡りの下に張った網だと思ってください。網は、予見できる落下——ときどき 0 になる 割る数、ときどき見つからないルックアップ——には理にかなっています。けれど網は、 あなたがなぜ落ちたかを知りません。綱が切れていたから落ちたのなら(参照していた列を 削除した、=VLOOKUP=VLOOKP と打ち間違えた)、網は同じように受け止めます—— そしてあなたは綱が壊れていることを二度と知りません。その盲目さこそが、まるごと危険の 正体です。

アンチパターン:覆いとしての IFERROR

これがバグを隠す動きです。何かがエラーを出す、だから数式全体を包んで先へ進む。

=IFERROR(SomeBigFormula(...), "")     ' 赤を消す

セルは今きれいに見えます。けれど IFERRORすべての種類のエラーを等しく 飲み込みます。

エラー たいていの意味 隠していい?
#N/A ルックアップが一致を見つけられない たいていは可——想定どおり
#DIV/0! 割る数が 0 か空白 時には——0 が正当なら
#REF! 参照先のセルが削除された 不可——本物のバグ
#NAME? 関数名・名前の打ち間違い 不可——本物のバグ
#VALUE! 型が違う(数値の所に文字列) 不可——たいてい本物のバグ

覆いとしての IFERROR は、下の3つを上の2つとまったく同じに扱います。3か月後に列を 削除すると、数式は #REF! になり、けたたましいエラーの代わりにこぎれいな空白が 返ってきます——そして静かに間違ったレポートが出来上がります。ルール:エラーを 消すために数式を IFERROR で包んではいけない。特定の、想定済みの失敗を処理する ためだけに包む——そしてまず、きれいなデータで数式が正しいことを証明すること。

IFNA:受け止めるつもりのものだけを受け止める

たいていの場合、あなたが実際に想定するエラーは、一致が見つからなかったルックアップ からの #N/A です。それこそが IFNA の役目で——#N/A を捕まえ、それ以外は 何も捕まえません。

' IFERROR — 一致なしと壊れた参照を同列に隠す
=IFERROR(VLOOKUP(A2, Table, 2, 0), "Not found")

' IFNA — 一致なしだけ処理し、#REF!/#NAME? は叫ばせ続ける
=IFNA(VLOOKUP(A2, Table, 2, 0), "Not found")

id が見つからないときは、どちらも "Not found" を返します。違いが現れるのは、別の 何かが壊れた日です。IFNA なら、削除された列はそれでも #REF! をはっきりと表に 出します。IFERROR なら、それは "Not found" の下に埋もれます。ルックアップ—— VLOOKUPXLOOKUPMATCHINDEX/MATCH——には、IFNA が正しい既定であって、 IFERROR ではない。 IFERROR に手を伸ばすのは、想定するエラーが本当に #N/A でないとき(0 に当たりうる意図的な割り算など)だけにします。

性能の罠:数式を二度計算しない

IFERROR が存在する前(2007年以前)、エラーを捕まえる唯一の方法は IF(ISERROR(…)) パターンでした——そしてそれには隠れたコストがあります。

' 古いパターン — VLOOKUP を二度走らせる(テスト用、それから値用にもう一度)
=IF(ISERROR(VLOOKUP(A2, T, 2, 0)), "", VLOOKUP(A2, T, 2, 0))

' IFERROR — 一度だけ走らせる
=IFERROR(VLOOKUP(A2, T, 2, 0), "")

古い形は、テストするために高コストなルックアップを一度評価し、返すためにもう一度 評価します——行ごとに作業が倍になり、大きなシートでは一気に効いてきます。IFERROR (と IFNA)は内側の数式を一度だけ評価します。引き継いだブックにまだ IF(ISERROR(…)) パターンが残っているなら、IFERRORIFNA に畳むのは、ただの 高速化かつ読みやすさの勝利です。

数値を汚さないフォールバックを選ぶ

2つ目の引数のは、人が思う以上に重要です。なぜなら、返したものが下流のすべてに 流れ込むからです。

  • 欠損値に 0 を返すと、それが平均に混ざります——AVERAGE やグラフは 「データなし」を本物のゼロとして扱い、結果を引き下げます。
  • ""(空文字列)を返すと、そのセルに対する数値計算は #VALUE! を投げうるし、 SUM は飛ばしますが ISNUMBERFALSE を読みます。
  • 「データなし」には、NA() がしばしば最も正直なフォールバックです——グラフは #N/A の点を、ゼロとしてプロットするのではなく飛ばします。

判断:フォールバックは、ただエラーを消すためでなく、そのセルがどう消費されるかに 合わせて選ぶ。「表示には空白、グラフには NA()、0 が本当に正しい数字のときだけ 0」 が良い既定です。

なぜ XLOOKUP がしばしば IFERROR を不要にするのか

新しい作業では、最もきれいな対策は、そもそも包まないことです。 XLOOKUP には4つ目の引数 if_not_found が内蔵されていて、 欠損のケースをルックアップの内側で処理します。

=XLOOKUP(A2, Ids, Names, "Not found")     ' IFERROR/IFNA は不要

これは包むより端的に優れています:一度だけ評価され、実際の一致なしのときだけ作動し (他所の #REF! では作動しない)、意図が数式の中にそのまま表れます。同じ考えは 現代の関数のあちこちに現れます——FILTERif_empty 引数は「一致する行なし」に対して同じ役割を果たします。関数が自前の「見つからない」 ハンドラを備えているなら、外側の IFERROR よりそちらを優先します。

ExcelMaster の使いどころ

エラー処理のやっかいなところは、間違ったやり方が正しいやり方とそっくりに見える ことです——どちらも赤を消します。ExcelMaster は嘘をつかない方を書きます: ルックアップには IFNA を使って本物の破綻をなお表に出し、外側のラッパーの代わりに XLOOKUPif_not_found を使い、そのセルが集計やグラフにどう流れ込むかに合わせて フォールバック値を選ぶ。あなたは「見つからない」が何を表示すべきかを述べるだけ。 壊れた参照がその陰に隠れられないよう、こちらが確かめます。

よくある質問

IFERRORとIFNAの違いは?

IFERRORあらゆる種類のエラーを捕まえます(#REF!#NAME?#VALUE!#DIV/0!#N/A、…)。IFNA#N/A だけを捕まえます。ルックアップでは、 一致なしを処理しつつ #REF! のような本物のバグはなお表に出すので、IFNA の方が 安全です。

すべてを IFERROR で包むのがまずいのはなぜ?

本物のバグを隠すからです。削除された列(#REF!)や打ち間違えた関数(#NAME?)が 静かにフォールバックに置き換わり、壊れた数式が正常に見えて、出力が静かに間違います。 想定する特定のエラーだけを捕まえてください。

#DIV/0! エラーを隠すには?

その割り算だけを包んで、妥当な値を返します:=IFERROR(A2/B2, 0) または =IFERROR(A2/B2, "")0 が「割る数なし」の本当に正しい答えか確かめてください—— そのセルが AVERAGE に流れ込むなら、0 は平均を引き下げます。

IFERROR は VLOOKUP と XLOOKUP のどちらで使うべき?

VLOOKUP では、一致なしだけを捕まえるよう IFERROR より IFNA を優先します。 XLOOKUP では、ラッパーを丸ごと省いて4つ目の引数を使います: =XLOOKUP(A2, Ids, Names, "Not found")

IFERROR は古いExcelで使える?

IFERROR は Excel 2007 から、IFNA は Excel 2013 から搭載されています。古い IF(ISERROR(…)) の回避策もまだ動きますが、数式を二度評価します——できるときに IFERRORIFNA へ切り替えましょう。

検証環境

検証環境: Excel 365(Windows 11)— 最終確認 2026-06-25。

関連ガイド: ExcelのIF関数 · ExcelのIFS & SWITCH関数 · ExcelのXLOOKUP関数 · ExcelのFILTER関数