関数や数式を使ってさまざまな処理を行った際にエラーが発生してしまうケースもある。このような場合に、そのままエラーを表示するのではなく、エラー発生時の代替処理を指定できる関数がIFERRORとなる。他の関数と組み合わせて応用的な使い方もできる、非常にユニークな関数だ。この機会に使い方を覚えておくとよいだろう。
関数IFERRORでエラー表示を回避
これまで条件分岐に関連する関数をいくつか紹介してきたが、エラーの発生を条件に「代替処理」を実行するIFERRORも、ある意味、条件分岐を行う関数のひとつと考えられる。ということで、今回はIFERRORの基本的な使い方と応用例を紹介していこう。Excelの上級者になるための必須関数といえるので、よく使い方を研究しておくとよい。
まずは、関数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引数に「エラーの発生時に表示する文字」を指定すればよい。
この関数をオートフィルでコピーすると、以下の図のような結果になる。先ほどエラーが発生していたE8セルに"データなし"の文字が表示されているのを確認できるだろう。
このように「エラー」の代わりに「別の文字」を表示させるのが、関数IFERRORの最も基本的な使い方になる。今回の例では、エラーの代わりに"データなし"という文字を表示したが、これを空白(何も表示しない)にしたい場合は、第2引数に""(空文字)を指定すればよい。
エラーを回避して暫定値を計算可能にする
続いては、少しずつ応用的な使い方を紹介していこう。以下の図は「単価」×「数量」の計算を行い、その「合計」を求める表だ。よくある例なので、詳しく解説しなくても「数式」や「関数SUM」の記述内容は理解できるだろう。
「単価」×「数量」の数式をオートフィルでコピーすると、以下の図のような結果になる。今回の例では、E5セルで「#VALUE!」のエラーが発生している。これは、D5セルに"未定"という文字が入力されていることが原因だ。「数値」と「文字列」の計算は実行できないので、「#VALUE!」のエラーが発生する。
さらに、金額を合計する関数SUMも「#VALUE!」のエラーになっている。数量が"未定"なので、その「金額」を計算できないのは仕方ないが、暫定値でもよいので「現時点の合計」を表示してほしい…、というケースもあるだろう。
このような場合は、関数IFERRORを使って「単価」×「数量」の計算を行うとよい。今回は、エラーが発生したときに"未確定"の文字を表示するように指定した。
これをオートフィルでコピーすると、以下の図のような結果になる。E8セルのエラーが"未確定"に代わるだけでなく、「合計」のエラーも解消されていることを確認できるだろう。
この場合、E8セルのデータは「文字列データ」として扱われる。関数SUMは、合計するセル範囲に「文字列」が含まれていても、正しく計算を実行できる仕様になっている。「文字列」が含まれる場合は、そのセルを無視した形で「合計」が算出されることになる。
合計するセル範囲にエラーが含まれていた場合は、関数SUMの結果もエラーになってしまう。これを回避する対策法として、暫定的でも構わないから「現時点の合計」を表示させる、というのが今回のテクニックだ。このような用途に関数IFERRORが活用できるケースもある。
関数IFERRORで未入力のセルをチェック
続いては、関数IFERRORを使って「入力データ」のチェックを行う方法を紹介していこう。以下の図は「各商品の在庫がどれだけ残っているか?」をまとめた表となる。ただし、一部のデータが「空白」や「文字列」になっている。こういった「空白」や「文字列」の有無をチェックする機能を関数IFERRORで作成してみよう。
関数IFERRORの第1引数に指定する「実行する処理」は色々な手法が考えられるが、今回は「各倉庫のデータの掛け算」÷「各倉庫のデータの掛け算」という数式を指定した。この数式は「分子」と「分母」が同じになるので、その結果は1になるのが基本だ。
関数IFERRORをオートフィルでコピーした様子を示しておこう。データに「空白」や「文字列」が含まれる行は、"データ異常"という文字が表示されているのを確認できるだろう。
※セルの値が"データ異常"のときに、赤く強調表示する「条件付き書式」を指定。
上記のテクニックは、「空白は0(ゼロ)として扱われる」、「文字列の計算はエラーになる」という仕様を利用したものだ。
データに「空白」が含まれていた場合、そのセルは0として扱われる。よって、それらを掛け算した値は必ず0になる。つまり、0÷0という計算になり、「#DIV/0!」(0では割り算できない!)のエラーが発生する。データに「文字列」が含まれていた場合は、各データを掛け算する時点でエラーが発生する。
要するに、「空白」や「文字列」が含まれている行では計算時にエラーが発生し、その代替処理として"データ異常"の文字が表示される、という仕組みになる。
なお、同様のチェック機能は「条件付き書式」でも実現できる、と思う方もいるかもしれないが、実は簡単ではない。というのも、「文字列」が「数値」より大きいデータとみなされてしまうからだ(詳しくは第49回の連載を参照)。
たとえば、C4~E20のセル範囲に「1未満」の条件で強調表示を指定すると、以下の図のような結果になる。
「空白」セルは0(ゼロ)とみなされるため正しく強調表示されるが、「文字列」のセルは「1未満」の条件に合致しないため、スルーされてしまう。よって、「文字列」が入力されているセルを見落としてしまう恐れがある。これは、Excelに慣れている方でも犯しやすいミスなので注意しておこう。
関数VLOOKUPとの組み合わせ
続いては、IFERRORを他の関数と組み合わせて利用する方法を紹介していこう。よくあるケースは、関数VLOOKUPと組み合わせる方法だ。関数VLOOKUPにより問題なくデータを取得できた場合は、以下の図のように、その取得結果がセルに表示される。
一方、該当するデータが見つからなかった場合は「#N/A」のエラーになってしまう。
このエラー表示を回避するために、関数IFERRORが併用されるケースもある。たとえば、以下の図のように関数を記述すると、エラーが発生したときに"該当なし"という文字を表示できるようになる。
なお、VLOOKUPではなく、XLOOKUPを使ってデータを取得する場合は、第4引数に[#N/A代替]のエラー処理を指定できるので、IFERRORを併用する必要はない。
関数FINDとの組み合わせ
指定した文字が「データの何番目に登場するか?」を調べる関数FINDと組み合わせて、関数IFERRORを利用するケースもある。こちらは少し上級者向けの応用的な使い方となる。
以下の図は、関数FILTERを「部分一致」でも検索できるように改良した例だ。その仕組みは第26回の連載で詳しく解説しているので、気になる方は確認してみるとよいだろう。
このようにFINDとIFERRORを組み合わせると、「部分一致」でデータを取得できるようになる。「完全一致」でしか検索できない関数FILTERを「部分一致」にも対応させるテクニックとして重宝するだろう。
そのほか、第38回の連載で紹介した、住所から「都道府県」を抜き出す方法にも関数IFERRORが利用されている。こちらは、住所に"県"の文字が見つからなかったとき(関数FINDでエラーが発生したとき)に、「住所の先頭から3文字を抜き出す」という代替処理を行うことで、「都道府県」を抜き出す処理を実現している。
このように、エラーが発生することを前提にしてIFERRORを上手に利用する、という使い方もある。IFERRORは、使い方次第で非常に奥の深い関数となる。興味がある方は、この機会に色々と研究してみるとよいだろう。