目次
このチュートリアルでは、ExcelのISERROR関数の実用的な使い方に注目し、さまざまな計算式にエラーがないかどうかをテストする方法を紹介します。
Excel が理解できない、あるいは計算できない数式を書いた場合、Excel はエラーメッセージを表示して問題に注意を促します。 ISERROR 関数は、エラーを検出し、エラーが見つかった場合に代替手段を提供するのに役立ちます。
ExcelのISERROR関数
ExcelのISERROR関数は、#CALC!, #DIV/0!, #N/A, #NAME?, #NUM!, #NULL!, #REF!, #VALUE!, そして#SPILL! など、あらゆるエラーを検出します。 結果はブール値で、エラーが検出されれば「真」、それ以外は「偽」です。
この機能は、Excel 2000から2021までのすべてのバージョンとExcel 365で使用できます。
ISERROR関数の構文は、次のように簡単です。
イセローどこ 価値 は、エラーチェックの対象となるセル値または数式です。
エクセル ISERROR 数式
ISERROR式を最も単純な形で作成するには、エラーをテストしたいセルへの参照を指定します。 たとえば、次のようになります。
=ISERROR(A2)
エラーが見つかった場合はTRUEを、テストしたセルにエラーがない場合はFALSEを返します。
ExcelのIF ISERROR式
エラー発生時に独自のメッセージを返したり、別の計算を行うには、IF関数と一緒にISERRORを使用します。 一般的な式は次のようになります。
IF(ISERROR()の場合 式 (...), テキストまたは計算の失敗 , 式 ())人間の言葉に置き換えると、「メインの計算式の結果がエラーになった場合は、指定されたテキストを表示するか、別の計算を実行し、そうでない場合は、計算式の正常な結果を返す」ということです。
下の画像では、合計を数量で割ると、いくつかの誤差が生じます。 価格 の欄があります。
すべての異なるエラーコードをカスタムテキストに置き換えるには、次の IF ISERROR 式を使用します。
=IF(ISERROR(A2/B2), "Unknown", A2/B2)
Excel 2007 以降のバージョンでは、内蔵の IFERROR 関数を使用することで、同じ結果を得ることができます。
=IFERROR(A2/B2, "Unknown")
IFERRORは、A2/B2の計算を一度だけ行うので、少し速く実行できることに注意してください。 一方、IF ISERRORは、最初にエラーが発生するかどうか、次にテストがFALSEになった場合にもう一度計算を行うので、二度計算することになります。
IF ISERROR VLOOKUP式
VLOOKUPでISERRORを使用することは、実際には、上記のIF ISERROR式の特殊なケースです。 VLOOKUP関数が検索値を見つけられない場合、またはその他の理由で失敗した場合、この構文を使ってカスタム・テキスト・メッセージを表示します。
if(iserror(vlookup(...)), ") カスタムテキスト ", vlookup(...))この例では、ルックアップテーブル (D3:E10) からメインテーブル (A3:B15) に時間を引き出します。 ルックアップ値 (参加者の名前) がルックアップテーブルに存在しない場合、「Not qualified」を返します。
=IF(ISERROR(VLOOKUP(A3, $D$3:$E$10, 2, FALSE)), "Not qualified", VLOOKUP(A3, $D$3:$E$10, 2, FALSE))
補足:カスタムテキストを表示させたい場合は、以下のようにします。 ルックアップ値が見つからない (#N/Aエラー)その他のエラーを無視して、Excel 2013以降ではIFNA VLOOKUP式、それ以前のバージョンではIF ISNA VLOOKUPを使用します。
IF ISERROR INDEX MATCH 式
INDEX MATCHの組み合わせ(Excel 365ではINDEX XMATCH式)で検索を行う場合、ISERROR関数でエラーをチェックし、エラーが発生したらIFで指定したテキストを表示するという同じ手法で、起こりうるエラーをトラップして処理することが可能です。
if(iserror(インデックス) ( return_column , MATCH ( ルックアップバリュー , ルックアップカラム , 0)))), " カスタムテキスト ", INDEX ( return_column , MATCH ( ルックアップバリュー , ルックアップカラム , 0)))ルックアップテーブルの1列目に時刻があるとすると、VLOOKUPはその左側を見ることができないので、INDEX MATCH式を使ってD列から時刻を取り出すことにします。
=index($d$3:$d$10, match(a3, $e$3:$e$10, 0))
そして、それを前述の汎用式でネストして、キャッチしたエラーを好きなテキストに置き換えるのです。
=IF(ISERROR(INDEX($D$3:$D$10, MATCH(A3, $E$3:$E$10, 0))), "Not qualified", INDEX($D$3:$D$10, MATCH(A3, $E$3:$E$10, 0)))
注意:IF ISERROR VLOOKUP式と同様に、#N/Aエラーのみをトラップし、式自体の潜在的な問題を偽装しない方が理にかなっています。 そのためには、INDEX MATH式をExcel 2013以降ではIFNA、それ以前のバージョンではIF ISNAで包むようにしましょう。
IF ISERROR Yes/No 式
これまでの例では、IF ISERRORはエラーでなければ主式の結果を返していました。 しかし、別の方法で、エラーなら何かを、エラーでなければ別のものを返すことも可能です。
IF(ISERROR()の場合 式 (...)), " テキスト_if_error ", " テキスト_if_no_error ")このサンプルデータセットでは、正確な時刻には興味がなく、グループAのどの参加者が資格を持ち、どの参加者が資格を持たないかを知りたいだけだとします。 これを行うには、MATCH関数を使って列Aの名前と列Dの資格を持つ参加者のリストを比較し、結果をISERRORに渡します。 列Dに名前がない場合(MATCHがエラーを返す)には、次のようにします。D列に名前が表示されている場合(エラーなし)には、"Yes" または "Qualified" を返します。
=IF(ISERROR(MATCH(A3, $D$3:$D$10, 0)), "いいえ", "はい" )
エラー数の数え方
ある列のエラーの数を知るには、1つのセルだけでなく範囲をチェックする必要があります。 このため、ISERRORに対象範囲を「フィード」し、返されたブール値をダブル単項演算子(--)を使って1と0に強制します。 SUMまたはSUMPRODUCT関数で数値を合計して最終結果を出すことが可能です。
例えば、こんな感じです。
=sum(--iserror(c2:c10))
なお、通常の数式として機能するのは、動的配列をサポートするExcel 365とExcel 2021のみです。 Excel 2019以前では、Ctrl + Shift + Enterキーを押して配列数式を作成する必要があります(手動で中括弧を入力しないでください、それでは機能しません!)。
{=SUM(--ISERROR(C2:C10))}
また、配列をネイティブに扱うSUMPRODUCT関数を使えば、すべてのバージョンで通常のEnterキーで数式を完成させることができます。
=sumproduct(--iserror(c2:c10))
ExcelのISERRORとIFERRORの違いについて
ISERRORとIFERRORの両関数は、Excelでエラーをトラップして処理するために使用されます。 その違いは、次のとおりです。
- ISERRORは、純粋に値がエラーであるかどうかをテストするだけです。 すべてのExcelバージョンで利用可能です。
- IFERROR関数は、エラーを抑制または偽装するために設計されており、エラーが見つかった場合、指定した別の値を返します。 Excel2007以降で利用可能です。
IFERRORは、一見するとIF ISERRORの省略形のように見えますが、よく見ると違いがあることに気づきます。
- IFERRORで指定できるのは 値_if_error エラーがなければ、常にテストした値/式の結果を返します。
- IF ISERRORはより柔軟性があり、エラーが発生した場合にどうするか、エラーが発生しなかった場合にどうするか、両方の状況を処理することができます。
よりよく説明するために、次のような数式を考えてみましょう。
=IFERROR(A1, "計算エラー")
=IF(ISERROR(A1), "計算エラー", A1)
これら2つの数式は等価で、どちらもA1にある数式駆動型の値をチェックし、エラーであれば「計算エラー」を、そうでなければ - 値を返すというものです。
しかし、A1の値がエラーでない場合に何らかの計算を行いたい場合はどうでしょうか。 IFERROR関数ではそれができません。 IF ISERRORの場合は、最後の引数に目的の計算を入力するだけです。 例えば、以下のような感じです。
=IF(ISERROR(A1), "計算エラー", A1*2)
このように、時代遅れと思われがちなIFERROR式の長いバリエーションは、まだまだ使えるのです :)
ダウンロード可能なもの
ISERRORの計算式の例(.xlsxファイル)