数式がエラーになったとき、「とりあえずIFERRORで非表示にする」で済ませていませんか?
「#VALUE!」なのか「#N/A」なのかでは、原因も対処法もまったく違います。エラーの種類がわからないまま一括で隠してしまうと、本当に修正が必要な問題を見逃してしまうかもしれません。
そんなときに使えるのがERROR.TYPE関数です。エラーの種類を番号で返してくれるので、「どのエラーか」に応じて処理を分けられます。
NOTE
この記事は次のような人におすすめ
– エラーの種類を自動で判別して処理を分岐したい
– 数式のトラブル原因を素早く特定したい
– ISERROR関数やIFERROR関数との違いを知りたい
ERROR.TYPE関数とは?エラーの種類を番号で返す情報関数
ERROR.TYPE(えらー たいぷ)関数は、エラー値の種類を番号(数値)で返す情報関数です。”ERROR”は「誤り」、”TYPE”は「種類」を意味します。
たとえば #N/A なら 7、#VALUE! なら 3 のように、エラーごとに決まった番号を返します。エラーでない正常な値を渡すと #N/A を返すのが特徴です。
ISERROR関数は「エラーかどうか」をTRUE/FALSEで判定します。一方、ERROR.TYPE関数は「どの種類のエラーか」まで特定できるのがポイントです。
NOTE
ERROR.TYPE関数は Excel 2003 以降のすべてのバージョンで使用できます。Microsoft 365 でも同じ書き方で使えますよ。
ERROR.TYPE関数の書き方(構文と引数)
基本構文
=ERROR.TYPE(エラー値)
引数の説明
| 引数 | 必須/省略可 | 説明 |
|---|---|---|
| エラー値 | 必須 | エラーの種類を調べたい値またはセル参照 |
引数は1つだけです。省略はできません。セル参照・直接入力した値・数式の結果のいずれも指定できます。
戻り値一覧(エラー番号早見表)
ERROR.TYPE関数が返す番号とエラーの対応表です。
| エラー値 | 戻り値 | エラーの意味 | よくある原因 |
|---|---|---|---|
| #NULL! | 1 | セル範囲の共通部分がない | 範囲演算子(スペース)の誤り |
| #DIV/0! | 2 | ゼロで除算した | 割り算の分母が0または空白セル |
| #VALUE! | 3 | データ型が不正 | 数値を期待する場所に文字列 |
| #REF! | 4 | 参照先が無効 | セルや行・列の削除 |
| #NAME? | 5 | 関数名やセル名が不正 | 関数名のスペルミス |
| #NUM! | 6 | 数値が範囲外 | SQRT関数に負の数を指定 |
| #N/A | 7 | 値が見つからない | VLOOKUPの検索値が存在しない |
| #GETTING_DATA | 8 | データ取得中(外部接続) | 外部データソースの応答待ち |
| エラーでない値 | #N/A | 正常な値にはエラー番号がない | ― |
番号は1から始まり、エラーの種類ごとに固定されています。この番号を暗記する必要はありません。必要なときにこの早見表を参照してください。
TIP
#SPILL!や#CALC!など、Microsoft 365で追加されたエラーはERROR.TYPE関数で判定できません(#N/Aを返します)。これらのエラーにはISERROR関数で対応してください。
ERROR.TYPE関数の基本的な使い方
まずはシンプルな例で動きを確認してみましょう。
エラー種類ごとの判定結果
さまざまなエラーをERROR.TYPE関数で判定すると、次のような結果になります。
| A列の値 | 数式 | 結果 | 理由 |
|---|---|---|---|
| =10/0 (#DIV/0!) | =ERROR.TYPE(A2) | 2 | ゼロ除算エラー |
| =VLOOKUP(“Z”,D:E,2,0) (#N/A) | =ERROR.TYPE(A3) | 7 | 検索値が見つからない |
| =”あ”+1 (#VALUE!) | =ERROR.TYPE(A4) | 3 | データ型が不正 |
| =SQRT(-1) (#NUM!) | =ERROR.TYPE(A5) | 6 | 数値が範囲外 |
| 100 | =ERROR.TYPE(A6) | #N/A | 正常な数値なので判定不可 |
| 東京 | =ERROR.TYPE(A7) | #N/A | 正常な文字列なので判定不可 |
正常な値を渡すと #N/A を返す点に注意してください。「エラーかどうか」だけを判定したい場合は ISERROR関数 のほうが適しています。
セル参照と数式の直接指定
ERROR.TYPE関数にはセル参照と数式のどちらも渡せます。
セル参照で判定する場合:
=ERROR.TYPE(A1)
A1にエラー値が表示されていれば対応する番号を返します。正常な値が入っていれば #N/A です。
数式を直接指定する場合:
=ERROR.TYPE(VLOOKUP("Z",A:B,2,0))
VLOOKUPの結果が #N/A なら 7 を返します。数式の結果をいちいち別のセルに出す必要がないので便利です。
ERROR.TYPE関数の実務活用パターン
パターン1: IF関数でエラー種類ごとにメッセージを出し分ける
IF関数と組み合わせると、エラーの種類に応じて異なるメッセージを表示できます。
=IF(ISERROR(A2),IF(ERROR.TYPE(A2)=7,"該当データなし",IF(ERROR.TYPE(A2)=3,"入力値が不正","その他のエラー")),"OK")
この数式は、まずISERROR関数でエラーかどうかを判定します。エラーの場合、#N/A(番号7)なら「該当データなし」を返します。#VALUE!(番号3)なら「入力値が不正」です。それ以外のエラーには「その他のエラー」、正常値には「OK」を表示します。
NOTE
ISERRORを先に入れないと、正常な値のセルにも「その他のエラー」が表示されてしまいます。ERROR.TYPE関数は正常な値にも #N/A を返すため、必ずISERRORと組み合わせてください。
パターン2: SWITCH関数で複数のエラーを整理する(Microsoft 365)
Microsoft 365をお使いなら、SWITCH関数と組み合わせるとIFのネストを避けてスッキリ書けます。
=IF(ISERROR(A2),SWITCH(ERROR.TYPE(A2),2,"0で割っています",3,"入力値の型が違います",7,"該当データがありません","その他のエラーです"),"正常")
IFで何段もネストする必要がないので、可読性が格段に上がりますよ。エラー番号ごとに対応するメッセージをSWITCH関数で振り分けています。
TIP
SWITCH関数はMicrosoft 365とExcel 2019以降で使えます。Excel 2016以前をお使いの場合はパターン1のIF関数ネストを使ってください。
パターン3: エラー種類をCOUNTIFで集計してトラブル箇所を特定する
大量のデータを処理しているとき、どのエラーが多いかをCOUNTIF関数で集計できます。
まず作業列にERROR.TYPE関数の結果を出しておきます。
=IFERROR(ERROR.TYPE(A2),"")
正常な値は空文字にしておくのがポイントです。IFERROR関数でERROR.TYPE自体が返す #N/A を空文字に変換しています。
次に、この作業列をCOUNTIFで集計します。
=COUNTIF(B:B,7)
これで #N/A エラー(番号7)の件数がわかります。エラーが集中している種類を把握できると、修正の優先順位が立てやすくなります。
パターン4: エラーの種類に応じて代替値を変える
IFERROR関数はすべてのエラーを同じ代替値に置き換えます。ERROR.TYPE関数を使えば、エラーの種類ごとに異なる代替値を返せます。
=IF(ISERROR(A2),IF(ERROR.TYPE(A2)=7,0,IF(ERROR.TYPE(A2)=2,"",A2)),A2)
この数式では、#N/A(検索値なし)なら 0 を返し、#DIV/0!(ゼロ除算)なら空文字にしています。それ以外のエラーはそのまま表示して、見逃しを防ぎます。
「VLOOKUPの #N/A は 0 に変えたいけど、#REF! や #VALUE! はそのまま見えていてほしい」。そんな場面で役立つパターンです。
よくあるエラーと対処法
ERROR.TYPE関数そのものでエラーが出るケースをまとめました。
| 症状 | 原因 | 対処法 |
|---|---|---|
| #N/A が返る | 引数がエラーでない(正常な値) | 仕様どおりの動作です。ISERROR関数で先にエラーかどうかを判定しましょう |
| #N/A が返る | 引数を省略した | 引数は必須です。判定したいセルまたは数式を指定してください |
| #N/A が返る | #SPILL! や #CALC! を渡した | Microsoft 365 で追加されたエラーはERROR.TYPEで判定できません。ISERRORで対応してください |
| 意図しない番号が返る | 参照先が想定と違うエラーになっている | 参照先セルの数式を確認してください。戻り値一覧と照合すると原因がわかります |
TIP
ERROR.TYPE関数が #N/A を返したとき、「エラーがない正常な状態」と「引数の省略」の区別がつかない場合があります。ISERROR関数で先にチェックすれば確実に区別できますよ。
似た関数との違い・使い分け
ERROR.TYPE関数と似た働きをする関数を比較してみましょう。
ERROR.TYPE vs ISERROR:種類の判別 vs 有無の判定
| 比較項目 | ERROR.TYPE | ISERROR |
|---|---|---|
| 戻り値 | エラー番号(1〜8) | TRUE / FALSE |
| 正常値の場合 | #N/A | FALSE |
| 用途 | エラーの種類を特定したい | エラーの有無だけを確認したい |
ISERROR関数は「エラーかどうか」を判定するだけです。ERROR.TYPE関数は「どのエラーか」まで踏み込めます。エラーの種類ごとに処理を変えたいときはERROR.TYPE関数を選んでください。
ERROR.TYPE vs IFERROR:判別 vs 一括処理
| 比較項目 | ERROR.TYPE | IFERROR |
|---|---|---|
| 戻り値 | エラー番号(1〜8) | エラー時は代替値、正常時は元の値 |
| エラー種類の区別 | できる | できない(全エラー同じ扱い) |
| 用途 | エラーの種類に応じて分岐したい | エラーをまとめて代替値に置き換えたい |
IFERROR関数は「エラーなら全部これに置き換える」という一括処理です。ERROR.TYPE関数は「#N/Aのときはこう、#VALUE!のときはこう」と細かく分岐できます。
ERROR.TYPE vs TYPE関数:エラーの種類 vs データの種類
| 比較項目 | ERROR.TYPE | TYPE |
|---|---|---|
| 対象 | エラー値のみ | すべてのデータ型 |
| 戻り値 | エラー番号(1〜8) | データ型コード(1=数値, 2=文字列, 4=論理値, 16=エラー, 64=配列) |
| エラー値を渡した場合 | エラーの種類を特定 | 一律 16(エラー型) |
| 正常値を渡した場合 | #N/A | データ型に応じた番号 |
TYPE関数は「そのセルに何が入っているか(数値・文字列・エラーなど)」を判別します。ERROR.TYPE関数は「どの種類のエラーか」を判別します。目的が違うので、混同しないようにしましょう。
エラー判定関数の使い分けフロー
どの関数を使うか迷ったときは、次の順番で判断してみてください。
- エラーを代替値に置き換えるだけでよい → IFERROR関数
- エラーかどうかをTRUE/FALSEで判定したい → ISERROR関数
- #N/Aだけを判定したい → ISNA関数
- #N/A以外のエラーだけを判定したい → ISERR関数
- #N/Aだけを代替値に置き換えたい → IFNA関数
- エラーの種類ごとに処理を変えたい → ERROR.TYPE関数
エラー判定関数の対応範囲
| エラー値 | ERROR.TYPE | ISERROR | ISERR | ISNA | IFERROR | IFNA |
|---|---|---|---|---|---|---|
| #NULL! | 1 | TRUE | TRUE | FALSE | 代替値 | ― |
| #DIV/0! | 2 | TRUE | TRUE | FALSE | 代替値 | ― |
| #VALUE! | 3 | TRUE | TRUE | FALSE | 代替値 | ― |
| #REF! | 4 | TRUE | TRUE | FALSE | 代替値 | ― |
| #NAME? | 5 | TRUE | TRUE | FALSE | 代替値 | ― |
| #NUM! | 6 | TRUE | TRUE | FALSE | 代替値 | ― |
| #N/A | 7 | TRUE | FALSE | TRUE | 代替値 | 代替値 |
| 正常値 | #N/A | FALSE | FALSE | FALSE | 元の値 | 元の値 |
まとめ
ERROR.TYPE関数は、エラーの種類を番号で判別できる関数です。
- 7種類のエラーに対して1〜8の番号を返す
- 正常な値には #N/A を返す
- ISERRORと組み合わせると安全に判別できる
- IF関数やSWITCH関数との組み合わせでメッセージの出し分けが可能
- #SPILL!など365固有のエラーには対応していない
エラーの種類ごとに処理を変えたいときは、ERROR.TYPE関数の出番です。「とりあえずエラーを非表示にしたい」だけならIFERROR関数、「エラーかどうかだけ知りたい」ならISERROR関数を使いましょう。
エラー処理全般の使い分けを知りたい方は、IF・IFS・IFERROR・IFNAの使い分けも参考にしてみてください。
関連記事
- ISERROR関数の使い方 — すべてのエラーをまとめて判定
- ISERR関数の使い方 — #N/A以外のエラーを判定
- ISNA関数の使い方 — #N/Aだけを判定
- IFERROR関数の使い方 — エラーを代替値に置き換え
- IFNA関数の使い方 — #N/Aだけを代替値に置き換え
- Excelのエラー値一覧 — 7種類のエラーの原因と対処法
- TYPE関数の使い方 — セルのデータ型を番号で判別
- IF・IFS・IFERROR・IFNAの使い分け — エラー処理関数の選び方フロー
