要点 —
IFERROR(formula, value_if_error)は数式を実行し、エラーになったら 代わりにフォールバックを返します:=IFERROR(A2/B2, 0)。何時間も人を泣かせる 落とし穴:IFERROR はあらゆる種類のエラーを捕まえる——#REF!、#NAME?、#VALUE!、#DIV/0!、すべてです——だから、想定したエラーと一緒に本物のバグ (列の削除、関数名の打ち間違い)まで平気で隠します。一致が見つからないかも しれないルックアップには、代わりにIFNAを使う:#N/Aだけを捕まえ、 本物のエラーは表に出させます。さらに良いのは、新しいルックアップではXLOOKUP内蔵のif_not_foundを使うこと。IFERRORとIFNAはどちらも 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(…))パターンの性能の罠 - 集計を汚さないフォールバック値の選び方
- なぜ
XLOOKUPのif_not_foundがIFERRORをしばしば不要にするのか
考え方の軸:安全網であって、修理ではない
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" の下に埋もれます。ルックアップ——
VLOOKUP、XLOOKUP、MATCH、INDEX/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(…)) パターンが残っているなら、IFERROR/IFNA に畳むのは、ただの
高速化かつ読みやすさの勝利です。
数値を汚さないフォールバックを選ぶ
2つ目の引数の型は、人が思う以上に重要です。なぜなら、返したものが下流のすべてに 流れ込むからです。
- 欠損値に
0を返すと、それが平均に混ざります——AVERAGEやグラフは 「データなし」を本物のゼロとして扱い、結果を引き下げます。 ""(空文字列)を返すと、そのセルに対する数値計算は#VALUE!を投げうるし、SUMは飛ばしますがISNUMBERはFALSEを読みます。- 「データなし」には、
NA()がしばしば最も正直なフォールバックです——グラフは#N/Aの点を、ゼロとしてプロットするのではなく飛ばします。
判断:フォールバックは、ただエラーを消すためでなく、そのセルがどう消費されるかに
合わせて選ぶ。「表示には空白、グラフには NA()、0 が本当に正しい数字のときだけ 0」
が良い既定です。
なぜ XLOOKUP がしばしば IFERROR を不要にするのか
新しい作業では、最もきれいな対策は、そもそも包まないことです。
XLOOKUP には4つ目の引数 if_not_found が内蔵されていて、
欠損のケースをルックアップの内側で処理します。
=XLOOKUP(A2, Ids, Names, "Not found") ' IFERROR/IFNA は不要
これは包むより端的に優れています:一度だけ評価され、実際の一致なしのときだけ作動し
(他所の #REF! では作動しない)、意図が数式の中にそのまま表れます。同じ考えは
現代の関数のあちこちに現れます——FILTER の if_empty
引数は「一致する行なし」に対して同じ役割を果たします。関数が自前の「見つからない」
ハンドラを備えているなら、外側の IFERROR よりそちらを優先します。
ExcelMaster の使いどころ
エラー処理のやっかいなところは、間違ったやり方が正しいやり方とそっくりに見える
ことです——どちらも赤を消します。ExcelMaster は嘘をつかない方を書きます:
ルックアップには IFNA を使って本物の破綻をなお表に出し、外側のラッパーの代わりに
XLOOKUP の if_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(…)) の回避策もまだ動きますが、数式を二度評価します——できるときに
IFERROR/IFNA へ切り替えましょう。
検証環境
検証環境: Excel 365(Windows 11)— 最終確認 2026-06-25。
関連ガイド: ExcelのIF関数 · ExcelのIFS & SWITCH関数 · ExcelのXLOOKUP関数 · ExcelのFILTER関数
