美しい関数で生徒の成績をつけてみた

Macintosh

テストの点数に応じて5段階で成績をつけたい。さらにその成績の平均を求めたい。「Google スプレッドシート」であれこれ試してみました。「Microsoft Excel」でもほぼ同じ…かな?

スポンサーリンク

誤って成績を「文字列」にしたら「#DIV/0!」エラーに…

テストの点数に応じて成績を求める関数として、まずは「IF」を使ってみました。これは誰もが真っ先に思いつく方法でしょう。

=IF(C4>=80,”5″,IF(C4>=70,”4″,IF(C4>=50,”3″,IF(C4>=30,”2″,”1″))))

ん〜。ごちゃごちゃしていて、パッと見、何が書いてあるのかよく分かりません…。こんだけ長いとメンテナンスも大変そう。

ちなみにこの表、成績を「ABCDE」でつけていた頃のものをコピーしたんです。なので、アポストロフィーはそのままにして「ABCDE」だった部分を「54321」にすげかえただけ。成績を「数値」ではなく「文字列」で指定したため「AVERAGE」しようとしたら「#DIV/0!」エラーになったという始末です。

成績は「数値」に修正

「IF」はそのままにし、とりあえず成績を「数値」に修正したら、無事、成績の平均を求められました!当たり前ですね。

=IF(C13>=80,5,IF(C13>=70,4,IF(C13>=50,3,IF(C13>=30,2,1))))

ひとまず、これでやりたいことはできたんですが「IF」の式がどうにも長くて格好悪くね?

「IF」のネストをやめ「IFS」でシンプルに

そこで「IF」の多用をやめ、代わりに「IFS」を使って、ほんのちょっとシンプルな式にしてみました。

=IFS(C22>=80,5,C22>=70,4,C22>=50,3,C22>=30,2,C22<30,1)

まぁまぁ見やすくなりましたが、それでもまだ長ったらしいですよね。

関数を使わずにやってみた

そこで今度は、関数を使わずにやってみました。

=(C31>=80)+(C31>=70)+(C31>=50)+(C31>=30)+(C31>=0)

正直、関数を使わずにできることにビックリしましたが、この方法なら意外とスッキリして見えますね!でもまだ野暮ったいような気がしますが…。

「LOOKUP」でようやくスッキリ!

この手の計算はどうやら「LOOKUP」でもできるようです。

=LOOKUP(C40,{0,30,50,70,80},{1,2,3,4,5})

「LOOKUP」なら「<」や「=」を使わずに済むため、かなりクールな見た目になりました。この式をスマホで見ると1行に収まっているはずです。ん〜。それでも数字が多いなぁ。

究極の「MATCH」は美しい

あと一息ということで、最後に「MATCH」関数を使ってみました。

=MATCH(C49,{0,30,50,70,80})

こ、これは美しい!だって当初はこんなに↓長い式だったんですよ。恐るべし「MATCH」に感動!!

=IF(C4>=80,”5″,IF(C4>=70,”4″,IF(C4>=50,”3″,IF(C4>=30,”2″,”1″))))

シンプルは善なり

たかが式ですが、されど式。「MATCH」ぐらいシンプルな式なら、成績の基準点を変更することになったとしても、メンテナンス、ラクそうですし。自分自身はなかなか美しくなれないので、せめてこうした式ぐらいは美しくありたいものです。

「どうも、マッチで〜す」。歳バレバレwww

コメント

タイトルとURLをコピーしました