エラーの回避策

数式のエラー判定を行なって、問題なければ数式の本体部分を実行します。
計算式でのエラー表示は醜い(みにくい)ものです。 計算結果の値が表示されるべきところに#DIV/0!」「#N/Aなどとエラー表示されてしまいます。
これらは明確な計算式の間違いというわけではなく例外データによるものですが、その例外データの発生は通常は予測できるものなので、 処置としては「エラーを喚起する」のか、「値を置き換えて通常の流れにする」のか、といった対応を行ないます。
明らかにエラーになるケースが解っている場合は、その評価を行ないます。

「ゼロ除算」(#DIV/0!)の例です。

商とあまりの計算
(画像をクリックすると、このサンプルがダウンロードできます)
2行目(C2セル)はエラー判断なしです。

 =TRUNC($A2/$B2)
C2セルはこのような式で、「TRUNC関数」で商の小数部を切り捨てにしています。



関数概略説明
 TRUNC関数  数値の小数部を切り捨てて、整数または指定した桁数に変換します。引数は以下の通りです。
 ① 元の数値
 ② 切り捨て後の桁数(省略可、整数部のみにする場合は0または省略する)

エラーがあるなら、赤太字にするなどでそのエラーを喚起します。

B列(割る数)がゼロだと「ゼロ除算」のエラーとなり、#DIV/0!が表示されます。

ゼロ除算が発生!

※ここではエラーが赤太字で表示されていますが、これは「条件付き書式」でエラー時の書式を登録してあるからです。



「条件付き書式」の登録は、まず対象セルまたはセル範囲を選択し、リボンの「ホーム」⇒「条件付き書式」⇒「新しいルール」をクリックします。

ゼロ除算が発生!

「新しい書式ルール」の画面が出たら「数式を使用して、書式設定するセルを決定」を選択し、「次の数式を満たす場合に...」の所に 「ISERR関数」「ISNA関数」「ISERROR関数」等の数式を入力します。 この時の引数は先に選択したセル範囲の左上に当たるセルのアドレスです。
さらに右下の「書式」ボタンをクリックして赤太字になるように書式を登録し、この画面に戻ったらOKをクリックします。

ゼロ除算が発生!

登録した「新しい書式ルール」が一覧に追加されて表示されます。
一覧上に複数のルールが登録されている場合は上から順にルールが適用されますが、「条件を満たす場合は停止」にチェックがある場合は適用されたルールより下にあるルールは適用されません。



登録内容を確認して、OKをクリックします。

「ゼロ除算」等でそもそもエラーではなく、除算自体を避けるケースもあるでしょう。

3行目(C3セル)は分母がゼロかどうかを判断してから除算する方法です。

商とあまりの計算(分母ゼロ判定)

式はこのようになっています。

 =IF($B3<>0,TRUNC($A3/$B3),0)
ケースによりますが、ここでは分母がゼロの場合はエラーを出さずに、計算結果もゼロになるようにしています。
例えば企業の営業成績の帳票では、部門や分類別に「利益率」「構成比」等を表示させることがありますが、ある部門や分類で分母となる売上高がゼロだったら「ゼロ除算」のエラーは起こりうるわけです。
但し、分類細分化によって一部の分類で「分母がゼロ」があり得るのであれば、「エラー喚起」ではなく「通常の流れ」として処理することもあるでしょう。



関数概略説明
 IF関数  比較判断を行ない、肯定時と否定時に分けます。引数は以下の通りです。
 ① 比較判断式
 ② 肯定時の値(または処置式)
 ③ 否定時の値(または処置式)

「エラー判定を行なって問題なければ本体部分を実行する」の方法は以下の通りです。
前のサンプルは「ゼロ除算」という例外に対応していますが、それ以外のエラーがあった場合はそのまま表示されてしまいます。 単にエラーを隠せば良いのではありませんが、実際に「エラーが発生するか」を判定する方法がこちらです。

商とあまりの計算(ゼロ割り②)

これは、割り算の数式の上にエラー評価関数をかぶせた形の方法です。

 =IFERROR(TRUNC($A4/$B4),0)





関数概略説明
 IFERROR関数  数式がエラーと評価される場合に指定した値を返します。それ以外の場合は、数式の結果が返されます。
 引数は以下の通りです。
 ① エラーを検査する数式(または評価値)
 ② エラーの場合の値(または処置式)





IFERROR関数」はExcel2007世代で追加された関数です。
勤務先などでそれより古い「Excel97-2003ブック(*.xls)」が残っている場合は、

 =IF(ISERROR(TRUNC($A4/$B4)),0,TRUNC($A4/$B4))
このような数式を見かけるかも知れません。
IFERROR関数」と「ISERROR関数」、これは誤記ではなく異なる関数です。 1文字違いで全く動作が違うのでご注意下さい。



関数概略説明
 ISERROR関数  指定された値(数式)のエラー有無をチェックして、その結果によりTRUEまたはFALSEを返します。
 引数はエラーを検査する数式(または評価値)です。



この「ISERROR関数」や「ISERR関数」「ISNA関数」等は、 引数にある本体数式はエラー評価のためだけにあって、実行結果は返されません。ですから上位の「IF関数」の正常判断側で、 もう一度本体数式を実施しなければならないのです。
これに対して「IFERROR関数」はエラー評価で正常であれば、第1引数側の本体数式がそのまま実施されて結果が返されます。

コードから名称を表示の場合で「見つからない」時の表現は....

VLOOKUPで見つからない時
(画像をクリックすると、このサンプルがダウンロードできます)
VLOOKUP関数によるコードから名称を表示で、入力された「コード」がテーブル上に存在しないというのは ユーザーオペレーション上では「充分に起きることがある」ことです。 この時「#N/A」のような「一般の方にはよく解らない記号」を表示させるのではなく、「存在しないコード」だということを喚起する表示をすることは重要です。
ここでは「IFNA関数」を用いて以下の数式としました。

 =IFNA(VLOOKUP($B$2,マスタ!$A$1:$B$7,2,FALSE),"???")





関数概略説明
 IFNA関数  数式が#N/Aエラー値を返す場合に指定した値を返します。それ以外の場合は、数式の結果が返されます。
 引数は以下の通りです。
 ① エラーを検査する数式(または評価値)
 ② #N/Aエラーの場合の値(または処置式)
 VLOOKUP関数  テーブルまたはセル範囲の内容を行ごとに検索し、見つかった行の指定列番号の値を返します。
 検索はテーブルの左端列で行なわれます。引数は以下の通りです。
 ① 検索値
 ② テーブルとなるセル範囲
 ③ 戻り値となる列番号(セル範囲の左端列を「1」とする相対番号)
 ④ 検索方法(完全一致はFALSEとする)

IFNA関数」ではなく「IFERROR関数」でも「コードが見つからない(#N/A)」はエラー検知されますが、 この用途で「IFERROR関数」を使ってしまうと、もしも他のエラーが発生した時でも「???」が表示されてしまい、 ユーザーに誤解を与えてしまいます。
IFNA関数」を使うことで「ユーザー起因のエラー」と「他のエラー」が区別され、利用者が「何をしなければならないか」が明確になります。



なお、「IFNA関数」がなかった頃の古いバージョンで作成されたブックでは、

 =IF(ISNA(VLOOKUP($B$2,マスタ!$A$1:$B$7,2,FALSE)),"???",VLOOKUP($B$2,マスタ!$A$1:$B$7,2,FALSE))
このような数式になっている場合があります。