IFERROR・IFNA関数の使い方|エラー処理の基本
Excelで数式を組んでいると、参照先のデータが見つからない場合や計算が成立しない場合にエラー値が表示されることがあります。IFERROR関数とIFNA関数を使えば、これらのエラーを適切に処理し、見やすいシートを作成できます。この記事では、2つの関数の基本から実務での使い分けまでを解説します。
IFERROR関数の基本構文
IFERROR関数は、数式がエラーを返す場合に代替の値を表示する関数です。Excel 2007以降で利用可能で、すべてのエラー値(#N/A、#VALUE!、#REF!、#DIV/0!、#NUM!、#NAME?、#NULL!)をまとめて処理できます。
構文
=IFERROR(値, エラーの場合の値)
引数の説明
| 引数 | 説明 | 必須/任意 |
|---|---|---|
| 値 | エラーかどうかを判定する数式やセル参照 | 必須 |
| エラーの場合の値 | エラー時に返す代替値。文字列、数値、空文字列などを指定できる | 必須 |
基本的な使用例
割り算でゼロ除算エラーが発生する場合の処理です。
=IFERROR(B2/C2, "計算不可")
C2が0または空白の場合、#DIV/0!エラーの代わりに「計算不可」と表示されます。エラーが発生しなければ、通常の計算結果が返されます。
空文字列を返す方法
エラー時にセルを空白に見せたい場合は、空文字列を指定します。
=IFERROR(B2/C2, "")
印刷用の帳票など、エラー値を表示したくない場面で便利です。
IFNA関数の基本構文
IFNA関数は、#N/Aエラーだけを処理する関数です。Excel 2013以降で利用可能で、IFERROR関数よりも対象が限定されています。
構文
=IFNA(値, #N/Aの場合の値)
引数の説明
| 引数 | 説明 | 必須/任意 |
|---|---|---|
| 値 | #N/Aエラーかどうかを判定する数式やセル参照 | 必須 |
| #N/Aの場合の値 | #N/Aエラー時に返す代替値 | 必須 |
IFERROR関数との違い
IFNA関数は#N/Aエラーのみを処理し、それ以外のエラー(#VALUE!、#REF!など)はそのまま表示します。
| 関数 | 処理するエラー | 用途 |
|---|---|---|
| IFERROR | すべてのエラー値 | エラーの種類を問わず処理したいとき |
| IFNA | #N/Aエラーのみ | 検索系関数の「見つからない」だけを処理したいとき |
この違いが重要になるのは、数式に予期しないエラーが含まれる可能性がある場合です。IFERRORですべてのエラーを隠してしまうと、数式自体の誤りに気づけなくなるリスクがあります。
VLOOKUPとの組み合わせ
VLOOKUP関数は、検索値が見つからない場合に#N/Aエラーを返します。実務では、検索対象が存在しないケースは頻繁に発生するため、エラー処理は必須です。
売上データの商品名検索
商品コードから商品マスタを参照して商品名を取得する例です。
| セル | 内容 |
|---|---|
| A2 | 商品コード(入力値) |
| 商品マスタ | Sheet2のA:B列に商品コードと商品名 |
=IFERROR(VLOOKUP(A2, Sheet2!A:B, 2, FALSE), "該当なし")
商品コードがマスタに存在しない場合、#N/Aの代わりに「該当なし」と表示されます。
IFNA関数を使うべきケース
VLOOKUP関数の検索値が見つからないことだけを処理したい場合は、IFNA関数を使う方が安全です。
=IFNA(VLOOKUP(A2, Sheet2!A:B, 2, FALSE), "未登録")
この書き方なら、もし列番号の指定ミスで#REF!エラーが出た場合、そのエラーはそのまま表示されるため、数式の誤りに気づくことができます。
実務での使い分けの判断基準
以下のような基準で使い分けると、安全なシートを作成できます。
- 検索系関数(VLOOKUP、HLOOKUP、MATCH)の#N/A処理にはIFNA関数を優先する
- 計算結果のエラーをまとめて処理する場合はIFERROR関数を使う
- 完成した帳票で見た目を整える目的ならIFERROR関数でも問題ない
XLOOKUPとの組み合わせ
XLOOKUP関数にはエラー処理の引数が組み込まれているため、IFERROR/IFNAを使わなくても「見つからない場合」の値を指定できます。
XLOOKUP関数の第4引数
=XLOOKUP(A2, Sheet2!A:A, Sheet2!B:B, "該当なし")
第4引数に「見つからない場合の値」を直接指定できるため、IFERROR関数で囲む必要がありません。数式がシンプルになり、可読性も向上します。
それでもIFERROR/IFNAが必要な場面
XLOOKUP関数の第4引数は、検索値が見つからない場合のみ有効です。数式自体にエラーがある場合(参照範囲のサイズ不一致など)には対応できません。
=IFERROR(XLOOKUP(A2, Sheet2!A:A, Sheet2!B:B, "該当なし"), "エラー")
堅牢なシートを作る場合は、XLOOKUP関数の第4引数とIFERROR関数を組み合わせて、二重のエラー処理を行うこともあります。
実務での活用パターン
勤怠管理での活用
社員番号から氏名と部署を検索する勤怠管理シートの例です。
=IFNA(VLOOKUP(B3, 社員マスタ!A:C, 2, FALSE), "社員番号を確認してください")
社員番号が間違っている場合に、具体的なメッセージを表示することで入力ミスの修正を促せます。
売上集計での活用
月次売上を計算する際、データが未入力の月の処理です。
=IFERROR(SUMIFS(売上!D:D, 売上!A:A, A2, 売上!B:B, B2) / COUNTIFS(売上!A:A, A2, 売上!B:B, B2), 0)
平均売上を計算するとき、該当データがない場合のゼロ除算を0として処理します。
複数のエラー処理を組み合わせる
エラーの種類に応じて異なるメッセージを表示したい場合は、IF関数とISERROR系関数を組み合わせます。
=IF(ISNA(VLOOKUP(A2, マスタ!A:B, 2, FALSE)), "未登録",
IF(ISERROR(VLOOKUP(A2, マスタ!A:B, 2, FALSE)), "数式エラー",
VLOOKUP(A2, マスタ!A:B, 2, FALSE)))
ただし、この方法はVLOOKUPが最大3回実行されるため、データ量が多い場合はパフォーマンスに影響します。LET関数を使って改善する方法もあります。
=LET(結果, VLOOKUP(A2, マスタ!A:B, 2, FALSE),
IF(ISNA(結果), "未登録", IF(ISERROR(結果), "数式エラー", 結果)))
よくある間違いと注意点
エラーを隠しすぎない
IFERRORですべてのエラーを空文字列にしてしまうと、数式の誤りを見逃す原因になります。開発中はエラーを表示させておき、完成後に必要な箇所だけエラー処理を追加する方が安全です。
0とエラーの区別
IFERROR関数でエラー時に0を返す設定にしていると、本来の計算結果が0なのかエラーだったのかが区別できなくなります。
=IFERROR(B2/C2, 0)
この数式では、C2が0のときもB2がもともと0のときも結果が0になります。区別が必要な場合は、「-」や「N/A」などの文字列を返すことを検討してください。
IFERROR関数の入れ子
複数のVLOOKUPを順番に試す場合、IFERRORを入れ子にできます。
=IFERROR(VLOOKUP(A2, マスタ1!A:B, 2, FALSE),
IFERROR(VLOOKUP(A2, マスタ2!A:B, 2, FALSE), "どちらにも該当なし"))
マスタ1で見つからなければマスタ2を検索し、それでも見つからなければ「どちらにも該当なし」を返します。
Google スプレッドシートでの互換性
IFERROR関数はGoogle スプレッドシートでも同じ構文で使用できます。IFNA関数も同様に利用可能です。動作に大きな違いはありません。
まとめ
IFERROR関数とIFNA関数は、Excelのエラー処理において基本となる関数です。
- IFERROR関数はすべてのエラーをまとめて処理できる
- IFNA関数は#N/Aエラーだけを処理し、他のエラーは見逃さない
- VLOOKUPの#N/A処理にはIFNA関数を優先すると安全
- XLOOKUP関数は第4引数でエラー処理を内蔵している
- エラーを隠しすぎると数式の誤りに気づけなくなるため注意が必要
業務で検索系の関数を使う際は、エラー処理をセットで組み込む習慣をつけましょう。状況に応じてIFERROR関数とIFNA関数を適切に使い分けることで、堅牢で見やすいシートを作成できます。