関数や数式を使ってさまざまな処理を行った際にエラーが発生してしまうケースもある。このような場合に、そのままエラーを表示するのではなく、エラー発生時の代替処理を指定できる関数がIFERRORとなる。他の関数と組み合わせて応用的な使い方もできる、非常にユニークな関数だ。この機会に使い方を覚えておくとよいだろう。

関数IFERRORでエラー表示を回避

これまで条件分岐に関連する関数をいくつか紹介してきたが、エラーの発生を条件に「代替処理」を実行するIFERRORも、ある意味、条件分岐を行う関数のひとつと考えられる。ということで、今回はIFERRORの基本的な使い方と応用例を紹介していこう。Excelの上級者になるための必須関数といえるので、よく使い方を研究しておくとよい。

  • さまざまな用途に活用できる関数IFERROR

まずは、関数IFERRORの書式から解説していこう。関数IFERRORの第1引数には「実行する処理」を関数や数式で記述するのが一般的だ。続いて、その処理でエラーが発生したときの「代替処理」を第2引数に指定する。

◆関数IFERRORの書式 =IFERROR(関数・数式など, エラー時の処理)

具体的な例を使って使い方を紹介していこう。以下の図は、ある企業の「2022年」と「2023年」の出荷量を比較したものだ。各地域の「前年比」を計算したいときは「=D3/C3」のように数式を記述すればよい。

  • 「前年比」を計算する数式

この数式をオートフィルでコピーすると、以下の図のような結果になる。今回の例では、E8セルの計算で「#DIV/0!」のエラーが発生している。

  • 数式をオートフィルでコピーした様子

このエラーは「0では割り算できない!」ということを示している。上図において、C8セルは「空白セル」になっている。この場合、C8セルの数値は0(ゼロ)とみなされる。つまり、D8/C8(27,014÷0)の計算を行おうとしたが、0では割り算できないためエラーが発生した、ということになる。

こういった「エラーの表示」を回避したい場合に関数IFERRORが活用できる。この場合は、関数IFERRORの第1引数に「実行する処理」(2023年÷2022年の計算)を記述し、続いて第2引数に「エラーの発生時に表示する文字」を指定すればよい。

  • 関数IFERRORを使ったエラー対策

この関数をオートフィルでコピーすると、以下の図のような結果になる。先ほどエラーが発生していたE8セルに"データなし"の文字が表示されているのを確認できるだろう。

  • 関数IFERRORをオートフィルでコピーした様子

このように「エラー」の代わりに「別の文字」を表示させるのが、関数IFERRORの最も基本的な使い方になる。今回の例では、エラーの代わりに"データなし"という文字を表示したが、これを空白(何も表示しない)にしたい場合は、第2引数に""(空文字)を指定すればよい。

エラーを回避して暫定値を計算可能にする

続いては、少しずつ応用的な使い方を紹介していこう。以下の図は「単価」×「数量」の計算を行い、その「合計」を求める表だ。よくある例なので、詳しく解説しなくても「数式」や「関数SUM」の記述内容は理解できるだろう。

  • 「単価」×「数量」の計算と「合計」の算出

「単価」×「数量」の数式をオートフィルでコピーすると、以下の図のような結果になる。今回の例では、E5セルで「#VALUE!」のエラーが発生している。これは、D5セルに"未定"という文字が入力されていることが原因だ。「数値」と「文字列」の計算は実行できないので、「#VALUE!」のエラーが発生する。

  • 数式をオートフィルでコピーした様子

さらに、金額を合計する関数SUMも「#VALUE!」のエラーになっている。数量が"未定"なので、その「金額」を計算できないのは仕方ないが、暫定値でもよいので「現時点の合計」を表示してほしい…、というケースもあるだろう。

このような場合は、関数IFERRORを使って「単価」×「数量」の計算を行うとよい。今回は、エラーが発生したときに"未確定"の文字を表示するように指定した。

  • 関数IFERRORを使ったエラーの回避

これをオートフィルでコピーすると、以下の図のような結果になる。E8セルのエラーが"未確定"に代わるだけでなく、「合計」のエラーも解消されていることを確認できるだろう。

  • 関数IFERRORをオートフィルでコピーした様子

この場合、E8セルのデータは「文字列データ」として扱われる。関数SUMは、合計するセル範囲に「文字列」が含まれていても、正しく計算を実行できる仕様になっている。「文字列」が含まれる場合は、そのセルを無視した形で「合計」が算出されることになる。

合計するセル範囲にエラーが含まれていた場合は、関数SUMの結果もエラーになってしまう。これを回避する対策法として、暫定的でも構わないから「現時点の合計」を表示させる、というのが今回のテクニックだ。このような用途に関数IFERRORが活用できるケースもある。

関数IFERRORで未入力のセルをチェック

続いては、関数IFERRORを使って「入力データ」のチェックを行う方法を紹介していこう。以下の図は「各商品の在庫がどれだけ残っているか?」をまとめた表となる。ただし、一部のデータが「空白」や「文字列」になっている。こういった「空白」や「文字列」の有無をチェックする機能を関数IFERRORで作成してみよう。

  • 各倉庫の在庫を確認する表

関数IFERRORの第1引数に指定する「実行する処理」は色々な手法が考えられるが、今回は「各倉庫のデータの掛け算」÷「各倉庫のデータの掛け算」という数式を指定した。この数式は「分子」と「分母」が同じになるので、その結果は1になるのが基本だ。

  • 関数IFERRORを使った入力データのチェック

関数IFERRORをオートフィルでコピーした様子を示しておこう。データに「空白」や「文字列」が含まれる行は、"データ異常"という文字が表示されているのを確認できるだろう。

※セルの値が"データ異常"のときに、赤く強調表示する「条件付き書式」を指定。

  • 関数IFERRORをオートフィルでコピーした様子

上記のテクニックは、「空白は0(ゼロ)として扱われる」、「文字列の計算はエラーになる」という仕様を利用したものだ。

データに「空白」が含まれていた場合、そのセルは0として扱われる。よって、それらを掛け算した値は必ず0になる。つまり、0÷0という計算になり、「#DIV/0!」(0では割り算できない!)のエラーが発生する。データに「文字列」が含まれていた場合は、各データを掛け算する時点でエラーが発生する。

要するに、「空白」や「文字列」が含まれている行では計算時にエラーが発生し、その代替処理として"データ異常"の文字が表示される、という仕組みになる。

なお、同様のチェック機能は「条件付き書式」でも実現できる、と思う方もいるかもしれないが、実は簡単ではない。というのも、「文字列」が「数値」より大きいデータとみなされてしまうからだ(詳しくは第49回の連載を参照)。

たとえば、C4~E20のセル範囲に「1未満」の条件で強調表示を指定すると、以下の図のような結果になる。

  • 条件付き書式で「1未満のセル」を強調表示した場合

「空白」セルは0(ゼロ)とみなされるため正しく強調表示されるが、「文字列」のセルは「1未満」の条件に合致しないため、スルーされてしまう。よって、「文字列」が入力されているセルを見落としてしまう恐れがある。これは、Excelに慣れている方でも犯しやすいミスなので注意しておこう。

関数VLOOKUPとの組み合わせ

続いては、IFERRORを他の関数と組み合わせて利用する方法を紹介していこう。よくあるケースは、関数VLOOKUPと組み合わせる方法だ。関数VLOOKUPにより問題なくデータを取得できた場合は、以下の図のように、その取得結果がセルに表示される。

  • 関数VLOOKUPを使ったデータの取得

一方、該当するデータが見つからなかった場合は「#N/A」のエラーになってしまう。

  • 該当するデータが見つからなかった場合

このエラー表示を回避するために、関数IFERRORが併用されるケースもある。たとえば、以下の図のように関数を記述すると、エラーが発生したときに"該当なし"という文字を表示できるようになる。

  • IFERRORとVLOOKUPを組み合わせてエラー表示を回避

  • エラー表示を回避した例

なお、VLOOKUPではなく、XLOOKUPを使ってデータを取得する場合は、第4引数に[#N/A代替]のエラー処理を指定できるので、IFERRORを併用する必要はない。

関数FINDとの組み合わせ

指定した文字が「データの何番目に登場するか?」を調べる関数FINDと組み合わせて、関数IFERRORを利用するケースもある。こちらは少し上級者向けの応用的な使い方となる。

以下の図は、関数FILTERを「部分一致」でも検索できるように改良した例だ。その仕組みは第26回の連載で詳しく解説しているので、気になる方は確認してみるとよいだろう。

  • 関数FILTERを使って「部分一致」でデータを取得する場合

このようにFINDとIFERRORを組み合わせると、「部分一致」でデータを取得できるようになる。「完全一致」でしか検索できない関数FILTERを「部分一致」にも対応させるテクニックとして重宝するだろう。

  • 氏名カナに「スガ」を含むデータを取得した例

そのほか、第38回の連載で紹介した、住所から「都道府県」を抜き出す方法にも関数IFERRORが利用されている。こちらは、住所に"県"の文字が見つからなかったとき(関数FINDでエラーが発生したとき)に、「住所の先頭から3文字を抜き出す」という代替処理を行うことで、「都道府県」を抜き出す処理を実現している。

  • 住所から「都道府県」を抜き出す方法

このように、エラーが発生することを前提にしてIFERRORを上手に利用する、という使い方もある。IFERRORは、使い方次第で非常に奥の深い関数となる。興味がある方は、この機会に色々と研究してみるとよいだろう。