テストの点数に応じて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
コメント