【エクセル中級者向け】数式・関数のエラー表示の回避テクニック③④【IF関数+ISERR関数・ISNA関数】

AさんAさん

関数を使っているとエラー表示になることがありますが、そのままだと見栄えが悪くなりますし、そのエラーになったセルを参照している他の関数までエラーになってしまうので困っています。
何か良い方法ないですかね?

森田森田

エラー表示は確かに見栄えが悪いですし、複数の関数がエラーになると芋づる式にエラー続きになってしまいますね。
解決策は複数ありますが、今回は特定のエラー値の場合に回避するテクニックとして、【IF関数+ISERR関数】、【IF関数+ISNA関数】の2つの組み合わせを説明したいと思います。
では、詳細を解説していきますね。

Excelステップ講座

はじめに

本題に入る前に、この記事がおすすめな人を挙げてみます。

  • 関数のエラー表示に困っている人
  • エクセルを扱う機会がある人
  • 事務職を目指している人

ちなみに、最低限「IF関数の基礎」を把握している想定での記事となります。
※自信がない方はこちらの記事で学んでください。
【初心者向け】条件に応じてセルの値を変える!IF関数の使い方

数式・関数でエラー表示になってしまう!

たとえば、次のような単純な掛け算でも、数値ではない”-“などの文字列が入るだけで数式・関数はエラー表示になってしまうことがあります。

エラー表示は、数式や関数の入力間違いや参照誤りを気づかせてくれるアラート機能なので、基本的にはユーザーが不具合を認識するためになくてはならない便利な機能です。

しかし、単に数式や関数の計算対象に設定していたセルが未入力であっただけでもエラー表示になってしまうという、おせっかい機能になってしまうケースもあります。

こういった場合に、エラー表示をそのままにしておくと見栄えが悪いですし、そのエラー状態のセルを参照している他のセルの数式・関数の結果も連動してエラーになってしまいます。

ちなみに、エラー値の種類や原因については、以下の記事をご参照ください。
Excel(エクセル)関数エラー7種類の原因と対策まとめ

引数「論理式」にISERR関数またはISNA関数を組み合わせる!

こういったエラー表示を回避するために、IF関数の引数「論理式」へISERR関数やISNA関数を組み合わせます。

ISERR関数とISNA関数とは?

ISERR関数とISNA関数はともに情報関数の一種で、それぞれ次の7種類のエラー値のうち、下記の表の”○”に該当する場合に”TRUE”を返してくれる関数です。(該当しない場合は戻り値が”FALSE”になります)

エラー値 ISERR関数 ISNA関数
#N/A
#VALUE!
#REF!
#DIV/0!
#NUM!
#NAME?
#NULL!

それぞれ構文は以下のとおりです。

ISERR (テスト対象)

ISNA(テスト対象)

試しに、このISERR関数とISNA関数をそれぞれ単体で使ってみるとイメージが湧きやすいと思います。

ISERR関数の使い方

たとえば、次の表のC5セルに「A2*B2」という掛け算を引数にしたISERR関数を入れてみましょう。

まず、引数「テスト対象」にした「A2*B2」のうち、B2セルの値が”-“という文字列のために掛け算の結果は”#VALUE!”というエラー値になります。

”#VALUE!”はISERR関数の対象になるエラー値のため、今回のISERR関数の戻り値が”TRUE”になっているわけですね。

ISNA関数の使い方

たとえば、次の表のようにA2セルの商品名をもとにD・E列にある表の金額を検索するVLOOKUP関数がB2セルにあります。(VLOOKUP関数の基礎を知りたい方→こちら

A2セルの商品名がない状態だと、B2セルのVLOOKUP関数の戻り値は” #N/A”というエラー値が表示されます。

実際にISNA関数で” #N/A”かどうかを調べてみるため、次の表のB8セルにISNA関数を入れてみました。

まず、引数「テスト対象」にはB2セルのVLOOKUP関数と同じ「VLOOKUP($A2,$D$2:$E$6,2,0)」という数式を入れていますので、その戻り値は当然” #N/A”になります。

” #N/A”はISNA関数の対象になるエラー値のため、今回のISNA関数の戻り値が”TRUE”になっているわけですね。

組み合わるとはどういうことか?

組み合わせるとは、このISERR関数やISNA関数をIF関数の引数「論理式」のところに入れるわけです。

こうして2つの関数を組み合わせて使うことで、引数「論理式」がISERR関数やISNA関数によってエラー値になったか否かを判定できるようになるわけです。

なお、IF関数の引数「真の場合」は、エラー値に該当する場合に表示したい値を入力します。

私は”-“や””(ブランク)などを指定することが大半ですね。

最後のIF関数の引数「偽の場合」は、ISERR関数やISNA関数の引数「テスト対象」と同じ内容にすることで、エラー値でない場合に当初の想定通りの計算や処理ができますよ。

サンプルファイルで練習しよう!

では、実際にISERR関数とISNA関数のそれぞれの組み合わせテクニックを使ってみましょう!

ISERR関数

サンプルの条件

ISERR関数の題材は次のとおりです。

「金額計算」というシートに「単価」と「数量」があり、それらを掛け算した結果として「金額」を計算したいとします。

今回、「数量」が”-“という値になっているため、単純な掛け算の数式では”#VALUE!”というエラー値になってしまいます。

このエラー表示にならないよう、IF関数とISERR関数を加えたC2セルな数式を入れてみましょう。

なお、エラー値になった場合のIF関数の引数「真の場合」の値を今回は”-“にします。

実際に練習してみよう!

可能であれば、以下のサンプルファイルをダウンロードして実際に操作してみてください。

サンプルファイル_IF関数_ISERR関数
※サンプルファイルのダウンロードには無料メルマガに登録いただく必要があります。
(上記リンクから登録フォームへ遷移します)

ファイルを開いたら次の手順を実施してください。

  1. 「金額計算」シートを選択
  2. C2セルへ「=IF(ISERR(A2*B2),”-“,A2*B2)」を入力
    ※赤字の部分をコピーして貼り付けてください。

C2セルの値が以下のとおりになればOKです!

A2・B2セルの値を変えてみて、C2セルの値がどう変わるかもいろいろ試してみてくださいね。

もし、表や数式を加工してしまった場合は、上記手順を実施済みの「金額計算 (関数あり)」シートもサンプルファイル内に用意していますので、必要に応じてご活用くださいね。

ISNA関数

サンプルの条件

ISNA関数の題材は次のとおりです。

「商品検索」というシートでA2セルの商品名をもとに各商品の単価を検索できます。

この検索自体はB2セルのVLOOKUP関数で行うことが可能です。

なお、各商品の単価は、同じシートのD・E列にある表を参照していますが、A2セルの商品名がない状態だと、B2セルのVLOOKUP関数の戻り値は” #N/A”というエラー値が表示されます。

このVLOOKUP関数が、A2セルがブランク状態でもエラーにならないように、数式にIF関数とISNA関数を加えてみましょう。

なお、エラー値になった場合のIF関数の引数「真の場合」の値は、ISERR関数の時と同様に”-“でOKです。

実際に練習してみよう!

可能であれば、以下のサンプルファイルをダウンロードして実際に操作してみてください。

サンプルファイル_IF関数_ISNA関数
※サンプルファイルのダウンロードには無料メルマガに登録いただく必要があります。
(上記リンクから登録フォームへ遷移します)

ファイルを開いたら次の手順を実施してください。

  1. 「商品検索」シートを選択
  2. B2セルの数式を「=IF(ISNA(VLOOKUP($A2,$D$2:$E$6,2,0)),”-“,VLOOKUP($A2,$D$2:$E$6,2,0))」へ修正
    ※赤字の部分をコピーして貼り付けてください。

B2セルの値が以下のとおりになればOKです!

A2セルの値を変えてみて、B2セルの値がどう変わるかもいろいろ試してみてくださいね。

もし、表や数式を加工してしまった場合は、上記手順を実施済みの「商品検索 (関数あり)」シートもサンプルファイル内に用意していますので、必要に応じてご活用くださいね。

さいごに

今回のエラー回避のテクニックは、エラー値の種類によって回避したいという場合に有効です。

エラー値のすべてに対応したい場合は、上記のテクニックではなく、IFERROR関数かIF関数+ISERROR関数のテクニックを活用した方が良いですね。

【中級者向け】数式・関数のエラー表示の回避テクニック②【IFERROR関数】

【中級者向け】数式・関数のエラー表示の回避テクニック①【IF関数+ISERROR関数】

今回のような便利なIF関数の応用テクニックを知りたい方は、私の書籍で紹介しているので、こちらもご参考にしていただければと思います。

▼IF関数を基本から応用まで体系的に学びたい方向け

▼IF関数の応用テクニックに加えて、その他VLOOKUP関数なども学びたい方向け

ご参考になれば幸いですm(_ _)m

森田森田

正直ISERR関数もISNA関数を実務で使ったことはほぼないですね。
使いどころを考えると、「特定のエラー値が出ることによって、あるデータの入力漏れや誤入力に気づくようにする」というかなりレベルの高い感じになりますので、あくまでもご参考まで。