其ノ8 if関数入門一歩前
タイトルは、廣松渉の『哲学入門一歩前』のもじりです。
ただ、廣松の本の方は「一歩前」と銘打ってあるものの良質の哲学入門書だったりするのですが、
こちらはホントに一歩前までかも…。
というのは、ここではif関数がテーマなんだけど、メインで語るのは「if関数を使わないでやってみる」ってことだったりするからです。
ハイ、ではいつものとおり、下記よりダウンロードお願いします。
開くとこんな↓です※1。
シートが2枚あるのですが、まずは「合格不合格」の方から。
60点以上なら合格、そうじゃなければ不合格
では最初の問題。
「試験の点数が、60点以上なら「合格」、それ未満なら「不合格」と表示したい」。
ハイ、スタート。
・
・
「Aという場合はこう、Bという場合はこう…」みたいなの、論理の世界では「条件」といいます。
今回のケースで言うと、「60点以上の場合は」「そうじゃないときは」ってのが「条件」にあたります※2。
でね、この「条件」を扱うとき、if関数を使うんです。
「if」って、「もし…ならば」って意味ですもんね、英語だと。
で、if関数の定式ってのは、こう↓なってます。
=if(条件となる式 , 式を満たすとき , 満たさないとき)
引数を3つとって…、あ、「引数」ってことば、あんまりなじみがなかったですね。
…えーと、要するに、if関数には3つ指定するところがあって、まず最初に条件となる式を入れます。
今回だと「60点以上ですか?」って式を入れてやればよいので、「B2 >= 60」とすればOK。
んで次に、「式がTrueのときにどう表示したいか」「Falseのときにどう表示したいか」を指定します※3。
このあたり、前回もやりましたが、おさらいです。
なので、if関数を使うと、こんなふうに↓なります※4 ※5。
どうでしょうか。
岩鬼・里中・微笑は60点以上なので「合格」と表示される。
山田と殿馬は60点に満たないから「不合格」。
…というのを、if関数でやってみました。
ですがコレ。
if関数を使わなくても、数式とフィルタでできちゃったりするんです。
ちょっとやってみましょう。
まず、「60点以上かどうか」判別する式を入れます。
1列追加して、そこに入れていきましょう。
式は…、=(B2>=60)で、判別できますね※6 ※7。
式を全セルに入れると、結果が「TRUE」「FALSE」で表示されます。
さて、「60点以上が合格」なんでしたね。
なので、フィルタを使って、「TRUE」のところだけ抽出します※8。
そうして抽出されたところに、「合格」の文字を入力する※9。
逆もやります。
「FALSE」のところに「不合格」を入力※10。
そいで最後に、フィルタを「すべて」にしてやれば、要求された結果が出ます※11。
これと同じことを、1列でやるのが、if関数なんです※12。
要するに、両者は同じことなんです。
ただ、if関数だと1列で済む、というだけのこと。
「なら、if関数の方が効率的だ」と言うかもしれません。
うん、たしかに場所は少なくて済むでしょう。
でも、別に2列使ったっていいじゃない。
if関数がむずかしいのは、この2列使う部分をあらかじめ頭の中で構築できなきゃいけない、という点です。
ただ、むずかしいなと感じたら、順を追って動かしてみて(この場合だと実際に2列作ってみて)カバーすれば良いだけのこと。
効率が良いか悪いかはともかく、いろんなやり方があるんです。
Excelに限らないことだけど、ひとつのゴールに向かうには、いろんなやり方があります。
実は、この章に限らずこのホームページ全体に言えることですが、
私は、最短距離でゴールに到達する方法を紹介する、という方針を採っていません。
私が語るのは、少ない手持ち武器で、なんとかゴールする方法、です。
スマートにゴールする仕方、ではありません。
スマートなやり方を紹介しているサイトは他所にたくさんあります。
対して私のは、泥臭くても良いから、とにかくゴールに到達できるやり方です。
手持ち武器は少なくてもしょうがないです。
特に最初は。
だけど、覚えたことは2コ3コでも、それを活かしていろんなことができる。
こういう方向を、私は目指してるんです。
もう1問いきましょう。
80点以上ならA判定、60点以上80点未満ならB判定、60点未満はC判定
では次の問題。
2枚目のシートに行ってください※13。
ま、さっきのと内容は同じなんだけどサ(笑)
で、今度の問題は、「80点以上なら「A」、60点以上80点未満なら「B」、60点未満は「C」と表示したい」です。
ハイ、スタート。
・
・
…ハイ、では、やり方。
シンプルに考えましょう。
まず、「点数」を「降順」で並べ替えます※14。
「降順」、つまり点数高い方から上から順ね。
そして、「80点以上のゾーン」「79~60のゾーン」「~59のゾーン」で色分けします※15。
で、色分けに合わせて「A」「B」「C」を入力する※16。
これでおしまい。
仮に生徒が100人いても、この方法ならそんなに手間もなくできるでしょう。
ただ、このやり方に1コだけケチつけると、「80点以上」とか「79~60」とかを目視で判断してるんですよね。
なので、数式でもやってみましょうか。※6~※11のやり方の応用です。
まず、「80点以上かどうか」を調べましょう※17。
式はもう、わかりますね。
で、フィルタをかけ、「TRUE」のところだけ「A」を入れる※18 ※19。
次。
「60点以上80点未満」を調べます。
ただ、コレ、要件が2つありますね。
「60点以上」と「80点未満」の2つです。
でね、実はExcelは、「○○と○○のあいだの数値」みたいなのを調べるときに、=(60 <= C2 < 80)のようにあいだにはさむ表記はできないんですよ。
おそらく、2つの不等号を同時に処理できない、みたいです。
なので、「60点以上」と「80点未満」の両方を満たす、という意味の式を入れてあげます※20。
and関数を使って、2つの要件を満たしてあげましょう。
…そう。
画面と同様に、
=and(C2 >= 60, C2 < 80)
と入れてあげればOK。
こうすれば、「60点以上」かつ「80点未満」という意味になりますので。
あ、そうそう、and式の中に入れる順番は別に「80点未満」「60点以上」の順番でも大丈夫ですよ。
今回はたまたま「60点以上」「80点未満」の順番にした、というだけで。
では今度は、このand式が「TRUE」のところに、「B」を入れてください※21 ※22。
で、あとは空白のところに「C」を入れれば完成です※23 ※24 ※25。 すばらしいね。
…「アレ?60点未満かどうかは調べなくていいの?=(C2<60)とかで」と疑問に思う方もいらっしゃるかもしれませんが、大丈夫です。
「80点以上かどうか」と「79~60かどうか」をすでに調べているのだから、残りは自動的に60点未満なのです。
もちろん、=(C2<60)でわざわざ調べても問題はないですよ。
僕はそんな、ていねいな仕事をする人、キライではありません。
さて、では、もしこの作業、(この章のテーマである)if関数を使うとしたら。
こう↓なります※26。
式、長いなー。
入力した式は、
=if(C2 >= 80, "A", if(and(C2 >= 60, C2 < 80), "B", "C"))
です。
ちょいと解説しましょう。
コレ、ご覧いただければわかるように、if関数を2回使っています。
if関数の使い方は、繰り返しになりますが、
=if(条件となる式 , 式を満たすとき , 満たさないとき)
でしたね。
で、はじめの条件のところに「80点以上ですか?」の判別式を入れます。
式が「TRUE」なら、「A」が入るよう指定します。
複雑なのはここからです。
最初の式が「FALSE」の場合ですね。
もう1回if関数を使い、今度は条件式を「60点以上80点未満ですか?」にします。
「60点以上80点未満ですか?」の式は、andを使うんでしたね。
で、この2コ目の式が「TRUE」なら「B」、「FALSE」なら「C」が入るよう指定します。
2コ目の式も「FALSE」、ということは、「80点以上ですか?」の問いにも「60点以上80点未満ですか?」の問いにも取り残された余り、ということですから、60点未満の「C」でOKですよね。
…まとめると、こんな感じでしょうか※27。
ちなみに、こういうif関数を2コ組み合わせるやり方を「ネスト」と言います。
「ネスト」とは「入れ子構造」という意味です。
…いかがでしょうか。最後のヤツはけっこうむずかしいですよね。
けど、if関数を使わないで済むやり方もある、ということも、同時にご理解いただけたかと思います。
繰り返しになりますが、ひとつのゴールにたどり着く方法はいろいろです。
もちろん、たくさんルートを知ってる方が便利かもしれません、が、最初はね、ひとつずつ、覚えていきましょうよ。