4. エラー処理

4−1 欠席者の処理 (IF関数, ISERROR関数)
定期考査を全て欠席した生徒のデータがあるとします。
各行E列に、B〜D列の値の平均を返す AVERAGE関数が記述されています。
| A | B | C | D
| 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!
という結果になってしまいます。
もちろん B3、C3、D3 のいずれかにゼロを入力すれば、
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関数の値を返します。
画面表示は、以下の通りとなるはずです。
| A | B | C | D
| 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), "" )
としましょう。E3〜E5も同様に。
第一引数の論理式は「セル範囲 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引数の "" を返し、セルには何も表示
されません。
|