「スプレッドシートで数式を入れたら#N/Aや#DIV/0!が表示されてしまった」。こんな経験、ありませんか?
エラーが並んだ表はそのまま共有しにくいですよね。見た目が悪いだけでなく、集計関数にも影響してしまいます。
そんなときに使えるのが、スプレッドシートのIFERROR関数です。この記事では基本の書き方から、VLOOKUPとの組み合わせ、IFNA関数との違い、よくあるエラーの対処法まで丁寧に解説します。
スプレッドシートのIFERROR関数とは?エラー処理の基本
IFERROR関数(読み方: イフエラー関数)は、数式がエラーを返したときに代わりの値を表示する関数です。「IF」は「もし」、「ERROR」は「エラーなら」という意味に由来しています。
たとえば「VLOOKUPで検索値が見つからないとき、#N/Aの代わりに”該当なし”と表示する」という処理を考えてみましょう。IFERROR関数を使えば、エラー判定と代替値の指定を1つの数式で完結できます。
IFERROR関数にできることをまとめると、次のとおりです。
- 数式のエラーを任意の文字列や数値に置き換える
- #N/A・#DIV/0!・#VALUE!など全7種のエラーを一括処理する
- エラーでないときは元の数式の結果をそのまま返す
- VLOOKUP・INDEX/MATCHなどの検索関数と組み合わせて使う
「エラーが出たら別の値を返す関数」と覚えておくとわかりやすいですよ。
NOTE
IFERROR関数はGoogleスプレッドシートの全バージョンで使えます。Excelでは2007以降に対応しているため、ファイルのやり取りでも安心です。
IFERROR関数の書き方(構文・引数)
基本構文
=IFERROR(値, エラー時の値)
カッコの中に「エラーを確認したい数式」と「エラーのときに返す値」を指定します。
引数の説明
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 値 | 必須 | エラーかどうかを確認する数式や値 |
| エラー時の値 | 任意 | エラーだったときに返す値(省略時は空白) |
第2引数の「エラー時の値」は省略できます。省略するとエラー時に空白(空文字列)が返ります。ただし実務では「該当なし」や0などを明示するのが一般的ですよ。
TIP
文字列を返す場合はダブルクォーテーションで囲みます。数値を返す場合は囲みません。
最もシンプルな使用例
B列の値をC列の値で割り算するとします。C列が0のときに#DIV/0!エラーが出るのを防いでみましょう。
=IFERROR(B2/C2, 0)
- B2/C2(値): 割り算の数式
- 0(エラー時の値): エラーが出たら0を返す
C2が0でなければ割り算の結果が返ります。C2が0のときは#DIV/0!の代わりに0が表示されます。
基本的な使い方3選
基本がわかったところで、仕事でよく使うパターンを見ていきましょう。
VLOOKUPのエラーを処理する(最頻出パターン)
商品コードをもとに商品名を検索するとします。VLOOKUP関数で該当がないと#N/Aエラーが出ます。IFERRORで「該当なし」に置き換えてみましょう。
=IFERROR(VLOOKUP(A2, E:F, 2, FALSE), "該当なし")
- VLOOKUP(A2, E:F, 2, FALSE): A2の商品コードをE列から検索
- “該当なし”: 検索値が見つからないときの表示
A2の値がE列に存在すれば商品名が返ります。存在しなければ「該当なし」と表示されます。検索系の関数でもっとも使われるパターンですよ。
割り算のゼロ除算エラーを防ぐ
達成率を計算するとき、目標が0だと#DIV/0!エラーが出ます。IFERRORで「-」に置き換えましょう。
=IFERROR(B2/C2, "-")
- B2/C2: 実績を目標で割った達成率
- “-“: 目標が0のとき「-」を表示
売上報告書やKPI管理表でよく使うパターンです。0を返すと「達成率0%」と誤解されるため、「-」や「N/A」を返すほうが親切ですよ。
INDEX/MATCHのエラーを処理する
INDEX関数とMATCH関数を組み合わせた検索でも、該当なしのときに#N/Aエラーが出ます。
=IFERROR(INDEX(B:B, MATCH(E2, A:A, 0)), "未登録")
- INDEX(B:B, MATCH(E2, A:A, 0)): E2をA列から検索し、B列の値を返す
- “未登録”: 該当がないときの表示
VLOOKUPよりも柔軟な検索ができるINDEX/MATCHですが、エラー処理の考え方は同じです。IFERRORで囲むだけで対応できます。
実務で使える応用パターン
エラー時に空白にする(表の見た目を整える)
エラーを完全に非表示にしたい場合は、第2引数に空文字列を指定します。
=IFERROR(B2/C2, "")
空文字列を指定すると、エラー時にセルが空白に見えます。印刷用の帳票や共有資料で、エラー表示を消したいときに便利です。
IF関数と組み合わせる
IF関数とIFERROR関数を組み合わせると、条件分岐とエラー処理を同時に行えます。
=IF(A2="", "", IFERROR(VLOOKUP(A2, E:F, 2, FALSE), "該当なし"))
A2が空白ならそもそも検索しません。値が入っているときだけVLOOKUPを実行し、見つからなければ「該当なし」を返します。入力途中のデータを扱うときに便利なパターンですよ。
複数の検索を順番に試す(フォールバック検索)
IFERROR関数をネスト(入れ子)にすると、最初の検索が失敗したら次の検索を試せます。
=IFERROR(VLOOKUP(A2, シート1!A:B, 2, FALSE), IFERROR(VLOOKUP(A2, シート2!A:B, 2, FALSE), "どちらにも該当なし"))
まずシート1から検索します。見つからなければシート2を検索します。どちらにもなければ「どちらにも該当なし」を返します。複数の参照テーブルを持つ業務で活用できるパターンです。
IFERROR関数で処理できるエラーの種類
IFERROR関数は、スプレッドシートで発生する全7種類のエラーを一括で処理できます。
| エラー | 発生原因 | 対処例 |
|---|---|---|
| #N/A | 検索値が見つからない | =IFERROR(VLOOKUP(...), "該当なし") |
| #DIV/0! | 0で割り算した | =IFERROR(B2/C2, 0) |
| #VALUE! | 引数のデータ型が不正 | =IFERROR(A2+B2, "数値を入力") |
| #REF! | 参照先のセルが削除された | =IFERROR(A2, "参照エラー") |
| #NAME? | 関数名のスペルミス | =IFERROR(数式, "数式エラー") |
| #NUM! | 数値として無効な計算結果 | =IFERROR(SQRT(A2), "計算不可") |
| #NULL! | 範囲の交差指定が不正 | =IFERROR(数式, "範囲エラー") |
WARNING
IFERRORは全エラーをキャッチするため、数式のバグ(#REF!や#NAME?)も隠してしまう場合があります。検索系のエラー(#N/A)だけを処理したい場合は、後述するIFNA関数を使うほうが安全です。
IFERROR関数とIFNA関数の違い・使い分け
IFERROR関数と似た関数に、IFNA関数があります。大きな違いは「処理するエラーの範囲」です。
| 項目 | IFERROR | IFNA |
|---|---|---|
| 対象エラー | 全7種のエラー | #N/Aのみ |
| 主な用途 | 汎用的なエラー処理 | VLOOKUP等の「該当なし」だけ処理 |
| バグ発見 | エラーを隠す可能性あり | #N/A以外はエラーのまま表示される |
| 構文 | =IFERROR(値, エラー時の値) | =IFNA(値, N/A時の値) |
どちらを使うべき?判断基準
使い分けの基準はシンプルです。
- VLOOKUPやMATCHの「該当なし」だけ処理したい → IFNA関数がおすすめ
- 割り算のゼロ除算など、複数種のエラーをまとめて処理したい → IFERROR関数が便利
- 数式のバグを見逃したくない → IFNA関数が安全
IFNA関数は#N/A以外のエラーをそのまま表示します。そのため、数式に問題があればすぐに気づけます。「なんでもIFERRORで囲む」のはやめて、用途に応じて使い分けてみてください。
よくあるエラーと対処法
IFERROR関数自体でエラーが出ることはほとんどありません。ただし、意図した動作にならないケースがあります。
エラーが処理されない
IFERRORの第1引数の外でエラーが発生している場合、処理されません。
NGの例: IFERRORの外で割り算している
=IFERROR(A2, "エラー") / B2
OKの例: エラーが出る数式全体をIFERRORで囲む
=IFERROR(A2/B2, "エラー")
エラーが出る可能性のある数式全体を第1引数に入れるのがポイントです。
第2引数を省略したときの注意点
第2引数を省略すると空白が返ります。ただし、空白セルと空文字列は厳密には異なります。
=IFERROR(B2/C2)
この数式でエラーが出ると空文字列(“”)が返ります。COUNTA関数(空白でないセルを数える関数)はこの空文字列をカウントします。集計に影響する場合は注意してください。
すべてのエラーが消えてデバッグできない
IFERRORで全エラーを隠すと、数式のミスに気づけません。
=IFERROR(VLOOKP(A2, B:C, 2, FALSE), "OK")
上の例では「VLOOKUP」を「VLOOKP」とスペルミスしています。本来は#NAME?エラーで気づけるはずです。しかしIFERRORが「OK」を返してしまいます。数式を組み立てるときは、まずIFERRORなしで動作を確認してから囲むのがおすすめですよ。
IFERROR関数自体は正しいのにエラーが出る
IFERROR関数の構文が正しくても、次のケースではエラーになります。
| 症状 | 原因 | 対処法 |
|---|---|---|
| 数式バーに文字列として表示される | セルの書式が「テキスト」 | 書式を「自動」に変更して再入力 |
| 括弧の数が合わないエラー | ネスト時の閉じ括弧の不足 | 開き括弧と閉じ括弧の数を確認 |
| 意図しない値が返る | 第1引数がエラーではない | 第1引数の数式を単体で確認 |
まとめ
スプレッドシートのIFERROR関数について解説しました。ポイントを振り返りましょう。
- IFERROR関数は「数式がエラーなら代替値を返す」関数
- 構文は
=IFERROR(値, エラー時の値)とシンプル - VLOOKUPの#N/A、割り算の#DIV/0!など全7種のエラーに対応
- IFNA関数は#N/Aだけを処理する。バグを見逃したくないならIFNAが安全
- 数式のデバッグ時はIFERRORを外してエラーを確認する
IFERRORは便利ですが、なんでも囲むとバグを隠すリスクがあります。まずはIFERRORなしで数式が正しく動くことを確認してから囲むようにしてみてください。
