4. エラー処理 

   4−1  欠席者の処理 (IF関数, ISERROR関数)
   4−2  一部欠席の処理 (IF関数, COUNT関数)


4−1  欠席者の処理 (IF関数, ISERROR関数)

定期考査を全て欠席した生徒のデータがあるとします。
各行E列に、B〜D列の値の平均を返す AVERAGE関数が記述されています。

 ABCD E
1 氏名 国語 数学 英語 平均
2 生徒氏名1 65 71 82 72.66667
3 生徒氏名2 欠席 欠席 欠席 #DIV/0!
4 生徒氏名3 90 31 91 70.66667
5 生徒氏名4 69 51 85 68.33333
6 平均 74.67 51 86 #DIV/0!

セル範囲のデータ件数がゼロの時、AVERAGE関数は エラー値 #DIV/0! を返します(上図のセル E3)。 また、AVERAGE、MAX、MIN 関数は、セル範囲の中に #DIV/0! が一つでも含まれていると、 戻り値に #DIV/0! を返すため、上図のセル E6#DIV/0! という結果になってしまいます。
もちろん B3C3D3 のいずれかにゼロを入力すれば、 E3 の演算結果は 0 になり、エラーは回避できます。しかし多くの場合、 欠席した生徒の得点を 0 と処理してしまうわけにはいきません。
欠席した生徒は平均値の数式を削除すればいいのですが、いちいち手作業で関数を消去する のはせっかくパソコンを使うのにスマートではないし、一度それをすると、このシートを次の機会に 使い回すことも難しくなります。

E列の各欄を、「もしデータ件数がゼロだったら空白セル扱いとする」という設定にして おきたいものです。それには、IF関数と ISERROR関数を使います。

  =IF(論理式, 真の時の結果, 偽の時の結果 )

    論理式 〜 ここのセル/数式の値が 0 以外の数値、1字以上の文字列
        なら真(TRUE)、0・空文字 "" であれば偽(FALSE)と評価されます。
    真の時の結果 〜 第一引数の論理式が真の場合、IF関数はここに記述した
        セル/数式の値を返します。
    偽の時の結果 〜 第一引数の論理式が偽の場合、IF関数はここに記述した
        セル/数式の値を返します。

  =ISERROR(検査対象 )

    検査対象 がエラー値なら真(TRUE)、それ以外は偽(FALSE)を返します。


上の表のE列(平均値を表示する列)の各行に、

E2 に  =IF( IEERROR(AVERAGE(B2:D2)), "", AVERAGE(B2:D2))
E3 に  =IF( IEERROR(AVERAGE(B3:D3)), "", AVERAGE(B3:D3))
E4 に  =IF( IEERROR(AVERAGE(B4:D4)), "", AVERAGE(B4:D4))
E5 に  =IF( IEERROR(AVERAGE(B5:D5)), "", AVERAGE(B5:D5))

と記述します。その演算結果は以下の通りです。
B〜D列の平均値が #DIV/0! を返す時、第1引数のISERROR関数の返す 論理値は真(TRUE)となります。その場合、IF関数自体は第2引数、すなわち "" を返します。セルには何も表示されません。
それ以外では ISERROR関数は偽(FALSE)とされます。その場合、IF関数自体は 第3引数、すなわちAVERAGE関数の値を返します。
画面表示は、以下の通りとなるはずです。
 ABCD E
1 氏名 国語 数学 英語 平均
2 生徒氏名1 65 71 82 72.66667
3 生徒氏名2 欠席 欠席 欠席  
4 生徒氏名3 90 31 91 70.66667
5 生徒氏名4 69 51 85 68.33333
6 平均 74.67 51 86 70.55556



4−2  一部欠席の処理 (IF関数, COUNT関数)

1教科または2教科だけデータが入っていた場合、AVERAGE関数はエラー値を返しません。 しかし、集計するには条件を同じくし、3教科受けた者のみで集計をするのが本筋ですから、 「1教科でも受けていなかったら集計から外す」という処理をする人も多いはずです。

E2 に  =IF( COUNT(B2:D2)=3, AVERAGE(B2:D2), "" )

としましょう。E3E5も同様に。
第一引数の論理式は「セル範囲 B2:D2 に、数値入りのセルが3個あるか」 という判定をしています。
   1教科だけ受験……COUNT(B2:D2) → 1
   2教科だけ受験……COUNT(B2:D2) → 2
   3教科とも受験……COUNT(B2:D2) → 3
IF関数は、3教科受験の時(真/TRUE)は第2引数であるAVERAGE関数の値を返します。 3教科受験者以外(偽/FALSE)では第3引数の "" を返し、セルには何も表示 されません。