VLOOKUPで「#N/A」が出るのは想定どおり。でも「#VALUE!」や「#REF!」が出たら、それは数式の構造ミスかもしれません。
IFERROR関数ですべてまとめて処理してしまうと、こうした構造ミスに気づけなくなります。そんなときに頼りになるのがISERR関数です。
この記事では、ISERR関数の基本から実務で役立つ活用パターンまでまとめて紹介します。
この記事は次のような人におすすめ
– #VALUE! や #REF! などのエラーを検知したいが、#N/A は除外したい
– VLOOKUPで「値が見つからない」と「数式の構造ミス」を区別したい
– ISERROR関数やISNA関数との違いを知りたい
ISERR関数とは?
ISERR(いず えらー)関数は、指定した値が #N/A 以外のエラー値かどうかを判定する関数です。
対象が #N/A 以外のエラーであれば TRUE を返します。数値・文字列・論理値・空白、そして #N/A エラーはすべて FALSE です。
#N/A だけを除外するのが最大の特徴です。#VALUE!、#REF!、#DIV/0!、#NAME?、#NUM!、#NULL! の6種類で TRUE を返しますが、#N/A では FALSE になります。
IS系(情報関数)の1つで、セルに入っているデータの種類を確認するための関数ファミリーに属しています。
NOTE
ISERR関数は Excel 2003 以降のすべてのバージョンで使用できます。Microsoft 365 や Googleスプレッドシートでも同じ書き方で使えます。
ISERR関数の書き方(構文と引数)
基本構文
=ISERR(テストの対象)
引数の説明
| 引数 | 必須/省略可 | 説明 |
|---|---|---|
| テストの対象 | 必須 | #N/A以外のエラーかどうか判定したい値またはセル参照 |
引数は1つだけです。省略はできません。セル参照・直接値・数式の結果のいずれも指定できます。
ISERR関数の基本的な使い方
まずはシンプルな例で動きを確認してみましょう。
エラー種類ごとの判定結果
さまざまなエラーをISERR関数で判定すると、次のような結果になります。
| A列の値 | 数式 | ISERR の結果 | 理由 |
|---|---|---|---|
| =10/0 (#DIV/0!) | =ISERR(A2) | TRUE | ゼロ除算エラー |
| =”あ”+1 (#VALUE!) | =ISERR(A3) | TRUE | データ型が不正 |
| #REF! | =ISERR(A4) | TRUE | 参照先が無効 |
| =ABC (#NAME?) | =ISERR(A5) | TRUE | 関数名が不正 |
| =SQRT(-1) (#NUM!) | =ISERR(A6) | TRUE | 数値が範囲外 |
| =VLOOKUP(“Z”,D:E,2,0) (#N/A) | =ISERR(A7) | FALSE | #N/A は対象外 |
| 100 | =ISERR(A8) | FALSE | 正常な数値 |
| 東京 | =ISERR(A9) | FALSE | 正常な文字列 |
#N/A のときだけ FALSE になっているのがポイントです。ISERR関数は #N/A 以外の6種類のエラーに反応します。
TIP
#N/A も含めてすべてのエラーを判定したい場合は ISERROR関数 を使いましょう。
ISERR関数の実務活用パターン
パターン1: VLOOKUPで「見つからない」と「数式ミス」を区別する
VLOOKUPは「検索値が見つからない」ときも「数式の構造に問題がある」ときもエラーを返します。ISERRを使えば、この2つを区別できます。
=IF(ISERR(VLOOKUP(B2,商品マスタ!A:C,2,FALSE)),"数式エラー",IF(ISNA(VLOOKUP(B2,商品マスタ!A:C,2,FALSE)),"該当なし",VLOOKUP(B2,商品マスタ!A:C,2,FALSE)))
#VALUE! や #REF! なら「数式エラー」、#N/A なら「該当なし」、正常ならVLOOKUPの結果を返します。
これがISERR関数の真価です。IFERROR関数ではすべてのエラーがまとめて処理されるため、この区別ができません。
TIP
「見つからない」だけでなく「列番号が範囲外(#REF!)」「検索値のデータ型が不正(#VALUE!)」なども発生しうるのがVLOOKUPです。IFERRORで全部まとめてしまうと、数式の構造ミスに気づけなくなりますよ。
パターン2: ISNA + ISERRでエラーの種類に応じたメッセージを出す
ISNA関数と組み合わせれば、エラーの種類に応じて処理を完全に分岐できます。
=IF(ISERR(A2),"構造エラー: 数式を見直してください",IF(ISNA(A2),"検索エラー: データを確認してください",A2))
この数式は3つの状態を区別します。
- #VALUE! や #REF! → 「構造エラー: 数式を見直してください」
- #N/A → 「検索エラー: データを確認してください」
- 正常値 → そのまま表示
VLOOKUPやXLOOKUPの結果列に設定しておくと、エラーの原因を一目で判別できます。運用担当者への引き継ぎ資料にも便利ですよ。
TIP
この「ISERR + ISNA」パターンは、ISERROR関数1つでは実現できない精緻なエラー分岐です。
パターン3: 条件付き書式で数式エラーだけをハイライトする
数式が入った列で #VALUE! や #REF! などの構造的なエラーだけを目立たせたい場合に使えます。#N/A は「該当なし」の正常な結果として扱いたいケースです。
- 対象範囲を選択します
- 「ホーム」タブ →「条件付き書式」→「新しいルール」を選択します
- 「数式を使用して、書式設定するセルを決定」を選びます
- 数式欄に
=ISERR(C2)と入力します - 好きな書式(赤い塗りつぶしなど)を設定します
#VALUE! や #REF! のセルだけが色付きになります。#N/A は色が付かないので、「見つからない」と「壊れている」を視覚的に区別できます。
パターン4: SUMPRODUCTで構造エラーをカウントする
大量のデータ範囲で、#N/A 以外の「修正が必要なエラー」が何件あるか確認できます。
=SUMPRODUCT(ISERR(C2:C100)*1)
C2:C100 の中で #VALUE!、#REF!、#DIV/0! などが何セルあるかを返します。#N/A は数えないので、「数式の問題だけ」を把握できます。
パターン5: XLOOKUPで構造エラーを先に処理する
XLOOKUPには第4引数(見つからない場合の値)がありますが、これで処理されるのは #N/A だけです。#VALUE! や #REF! は第4引数では処理されません。
=IF(ISERR(XLOOKUP(B2,商品マスタ!A:A,商品マスタ!B:B)),"数式を確認",XLOOKUP(B2,商品マスタ!A:A,商品マスタ!B:B,"該当なし"))
まずISERRで構造エラーを先に判定します。構造エラーでなければ、XLOOKUPの第4引数で #N/A を「該当なし」に置き換えます。
NOTE
XLOOKUPの第4引数は IFNA関数 に近い動作です。#N/A しか処理しないため、構造エラーの検知にはISERR関数が必要です。
ISERR関数と似た関数との違い・使い分け
エラー判定に使える関数は複数あります。それぞれの違いを把握しておくと、場面に応じて最適な関数を選べます。
| 関数 | 対象エラー | 戻り値 | 主な用途 |
|---|---|---|---|
| ISERR(この記事) | #N/A 以外のエラー | TRUE / FALSE | #N/A を除くエラーを判定する |
| ISERROR | すべてのエラー | TRUE / FALSE | エラーかどうかをTRUE/FALSEで返す |
| ISNA | #N/A のみ | TRUE / FALSE | #N/A だけを判定する |
| IFERROR | すべてのエラー | 代替値 | エラー時に指定した値を返す |
| IFNA | #N/A のみ | 代替値 | #N/A 時に指定した値を返す |
ISERROR・ISNA・ISERRの対応範囲を比較
3つの関数がどのエラーに反応するかを一覧にまとめました。
| エラー値 | ISERROR | ISNA | ISERR |
|---|---|---|---|
| #N/A | TRUE | TRUE | FALSE |
| #VALUE! | TRUE | FALSE | TRUE |
| #REF! | TRUE | FALSE | TRUE |
| #DIV/0! | TRUE | FALSE | TRUE |
| #NAME? | TRUE | FALSE | TRUE |
| #NUM! | TRUE | FALSE | TRUE |
| #NULL! | TRUE | FALSE | TRUE |
ISERROR = ISNA + ISERR です。つまり =OR(ISNA(A1), ISERR(A1)) と =ISERROR(A1) は同じ結果になります。
IFERRORとの使い分け
| 比較項目 | ISERR | IFERROR |
|---|---|---|
| 戻り値 | TRUE / FALSE | 正常値 or 代替値 |
| #N/A への反応 | FALSE(除外) | 代替値を返す(含む) |
| エラーの区別 | ISNA と組み合わせて可能 | できない |
| 主な用途 | エラー種類の判定・分岐 | エラー表示の回避 |
IFERROR ですべてのエラーをまとめて処理するのが手軽です。一方、「#N/A とそれ以外を区別したい」場面では ISERR + ISNA の組み合わせが必要です。
使い分けの判断フロー
- すべてのエラーを隠したい → IFERROR関数
- すべてのエラーをTRUE/FALSEで判定したい → ISERROR関数
- #N/A だけを隠したい → IFNA関数
- #N/A だけをTRUE/FALSEで判定したい → ISNA関数
- #N/A 以外のエラーを判定したい → ISERR関数(この記事)
NOTE
「エラーを代替値に置き換えたいだけ」なら IFERROR や IFNA のほうがシンプルです。IF/IFS/IFERROR/IFNAの使い分けは こちらの比較記事 でもくわしく解説しています。
よくあるエラーと対処法
ISERR関数自体がエラーを返すことはほとんどありません。ただし「思った結果にならない」ケースがあります。
| 症状 | 原因 | 対処法 |
|---|---|---|
| #N/A で TRUE が返らない | ISERR は #N/A を除外する | #N/A を判定するには ISNA関数 を使う |
| すべてのエラーで TRUE にしたい | ISERR は #N/A のみ除外する | すべて判定したいなら ISERROR関数 を使う |
| 空白セルで FALSE が返る | 空白はエラーではない | 空白判定には ISBLANK関数 を使う |
| 数式で #NAME? が表示される | 関数名のスペルミス | ISERR のスペルを確認する。ISERROR との混同に注意 |
IS系12関数の違い・使い分け
IS系関数は、セルに入っているデータの種類を判定するファミリーです。用途に合わせて使い分けましょう。
| 関数名 | 判定内容 | TRUE になる例 |
|---|---|---|
| ISBLANK | 空白セルか | 未入力のセル |
| ISERROR | 任意のエラー値か | #N/A, #VALUE!, #REF! など |
| ISERR(この記事) | #N/A 以外のエラー値か | #VALUE!, #REF!, #DIV/0! など |
| ISNA | #N/A エラーか | #N/A のみ |
| ISLOGICAL | 論理値(TRUE/FALSE)か | TRUE, FALSE |
| ISNUMBER | 数値か | 100, 3.14, 日付のシリアル値 |
| ISTEXT | 文字列か | “東京”, “123”(文字列型) |
| ISNONTEXT | 文字列以外か | 100, TRUE, 空白 |
| ISFORMULA | 数式が入っているか | =SUM(A1:A10) が入ったセル |
| ISREF | 有効なセル参照か | A1, Sheet2!B3 |
| ISEVEN | 偶数か | 2, 4, 100 |
| ISODD | 奇数か | 1, 3, 99 |
TIP
エラー判定の3兄弟を覚えておきましょう。ISERROR(全エラー)= ISNA(#N/A のみ)+ ISERR(#N/A 以外)。この関係がわかれば使い分けに迷いません。
まとめ
ISERR関数は、セルの値が #N/A 以外のエラーかどうかを判定する関数です。
| 項目 | 内容 |
|---|---|
| 構文 | =ISERR(テストの対象) |
| 対象エラー | #VALUE!, #REF!, #DIV/0!, #NAME?, #NUM!, #NULL!(6種類) |
| 除外エラー | #N/A(FALSE を返す) |
| 戻り値 | TRUE または FALSE |
| 関係式 | ISERROR = ISNA + ISERR |
- ISNA関数と組み合わせれば、エラーの種類に応じた精緻な分岐が可能
- XLOOKUPの第4引数は #N/A しか処理しないので、構造エラーの検知にはISERRが必要
- IFERRORですべてまとめて処理するか、ISERR + ISNAで区別するかがポイント
VLOOKUPやXLOOKUPで「#N/A は正常な結果だけど、それ以外のエラーは問題」という場面は意外と多いです。そんなときにISERR関数を使ってみてください。
