ExcelのERROR.TYPE関数の使い方|エラーの種類を番号で判別する方法

スポンサーリンク

数式がエラーになったとき、「とりあえず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/A7値が見つからないVLOOKUPの検索値が存在しない
#GETTING_DATA8データ取得中(外部接続)外部データソースの応答待ち
エラーでない値#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.TYPEISERROR
戻り値エラー番号(1〜8)TRUE / FALSE
正常値の場合#N/AFALSE
用途エラーの種類を特定したいエラーの有無だけを確認したい

ISERROR関数は「エラーかどうか」を判定するだけです。ERROR.TYPE関数は「どのエラーか」まで踏み込めます。エラーの種類ごとに処理を変えたいときはERROR.TYPE関数を選んでください。

ERROR.TYPE vs IFERROR:判別 vs 一括処理

比較項目ERROR.TYPEIFERROR
戻り値エラー番号(1〜8)エラー時は代替値、正常時は元の値
エラー種類の区別できるできない(全エラー同じ扱い)
用途エラーの種類に応じて分岐したいエラーをまとめて代替値に置き換えたい

IFERROR関数は「エラーなら全部これに置き換える」という一括処理です。ERROR.TYPE関数は「#N/Aのときはこう、#VALUE!のときはこう」と細かく分岐できます。

ERROR.TYPE vs TYPE関数:エラーの種類 vs データの種類

比較項目ERROR.TYPETYPE
対象エラー値のみすべてのデータ型
戻り値エラー番号(1〜8)データ型コード(1=数値, 2=文字列, 4=論理値, 16=エラー, 64=配列)
エラー値を渡した場合エラーの種類を特定一律 16(エラー型)
正常値を渡した場合#N/Aデータ型に応じた番号

TYPE関数は「そのセルに何が入っているか(数値・文字列・エラーなど)」を判別します。ERROR.TYPE関数は「どの種類のエラーか」を判別します。目的が違うので、混同しないようにしましょう。

エラー判定関数の使い分けフロー

どの関数を使うか迷ったときは、次の順番で判断してみてください。

  1. エラーを代替値に置き換えるだけでよい → IFERROR関数
  2. エラーかどうかをTRUE/FALSEで判定したい → ISERROR関数
  3. #N/Aだけを判定したい → ISNA関数
  4. #N/A以外のエラーだけを判定したい → ISERR関数
  5. #N/Aだけを代替値に置き換えたい → IFNA関数
  6. エラーの種類ごとに処理を変えたい → ERROR.TYPE関数

エラー判定関数の対応範囲

エラー値ERROR.TYPEISERRORISERRISNAIFERRORIFNA
#NULL!1TRUETRUEFALSE代替値
#DIV/0!2TRUETRUEFALSE代替値
#VALUE!3TRUETRUEFALSE代替値
#REF!4TRUETRUEFALSE代替値
#NAME?5TRUETRUEFALSE代替値
#NUM!6TRUETRUEFALSE代替値
#N/A7TRUEFALSETRUE代替値代替値
正常値#N/AFALSEFALSEFALSE元の値元の値

まとめ

ERROR.TYPE関数は、エラーの種類を番号で判別できる関数です。

  • 7種類のエラーに対して1〜8の番号を返す
  • 正常な値には #N/A を返す
  • ISERRORと組み合わせると安全に判別できる
  • IF関数やSWITCH関数との組み合わせでメッセージの出し分けが可能
  • #SPILL!など365固有のエラーには対応していない

エラーの種類ごとに処理を変えたいときは、ERROR.TYPE関数の出番です。「とりあえずエラーを非表示にしたい」だけならIFERROR関数、「エラーかどうかだけ知りたい」ならISERROR関数を使いましょう。

エラー処理全般の使い分けを知りたい方は、IF・IFS・IFERROR・IFNAの使い分けも参考にしてみてください。

関連記事

タイトルとURLをコピーしました