---topics:if関数---

其ノ8 if関数入門一歩前

タイトルは、廣松渉の『哲学入門一歩前』のもじりです。
ただ、廣松の本の方は「一歩前」と銘打ってあるものの良質の哲学入門書だったりするのですが、 こちらはホントに一歩前までかも…。 というのは、ここではif関数がテーマなんだけど、メインで語るのは「if関数を使わないでやってみる」ってことだったりするからです。
ハイ、ではいつものとおり、下記よりダウンロードお願いします。

開くとこんな↓です※1

if関数の練習問題
※1 if関数の練習問題

シートが2枚あるのですが、まずは「合格不合格」の方から。

60点以上なら合格、そうじゃなければ不合格

では最初の問題。 「試験の点数が、60点以上なら「合格」、それ未満なら「不合格」と表示したい」。
ハイ、スタート。

 ・
 ・
「Aという場合はこう、Bという場合はこう…」みたいなの、論理の世界では「条件」といいます。 今回のケースで言うと、「60点以上の場合は」「そうじゃないときは」ってのが「条件」にあたります※2

条件の見取り図
※2 条件の見取り図

でね、この「条件」を扱うとき、if関数を使うんです。 「if」って、「もし…ならば」って意味ですもんね、英語だと。
で、if関数の定式ってのは、こう↓なってます。

=if(条件となる式 , 式を満たすとき , 満たさないとき)

引数を3つとって…、あ、「引数」ってことば、あんまりなじみがなかったですね。 …えーと、要するに、if関数には3つ指定するところがあって、まず最初に条件となる式を入れます。 今回だと「60点以上ですか?」って式を入れてやればよいので、「B2 >= 60」とすればOK。 んで次に、「式がTrueのときにどう表示したいか」「Falseのときにどう表示したいか」を指定します※3
このあたり、前回もやりましたが、おさらいです。

if関数のイメージ
※3 if関数のイメージ

なので、if関数を使うと、こんなふうに↓なります※4 ※5

if関数を入れてみた
※4 if関数を入れてみた
60点以上の岩鬼・里中・微笑は合格、あとは不合格
※5 60点以上の岩鬼・里中・微笑は合格、あとは不合格

どうでしょうか。
岩鬼・里中・微笑は60点以上なので「合格」と表示される。 山田と殿馬は60点に満たないから「不合格」。 …というのを、if関数でやってみました。

ですがコレ。
if関数を使わなくても、数式とフィルタでできちゃったりするんです。
ちょっとやってみましょう。

まず、「60点以上かどうか」判別する式を入れます。 1列追加して、そこに入れていきましょう。
式は…、=(B2>=60)で、判別できますね※6 ※7

60点以上ですか?
※6 60点以上ですか?
「60点以上ですか?」に対して、True/Falseが返ってくる
※7 「60点以上ですか?」に対して、True/Falseが返ってくる

式を全セルに入れると、結果が「TRUE」「FALSE」で表示されます。
さて、「60点以上が合格」なんでしたね。 なので、フィルタを使って、「TRUE」のところだけ抽出します※8。 そうして抽出されたところに、「合格」の文字を入力する※9

フィルタで式の答えが「True」のところを抽出
※8 フィルタで式の答えが「True」のところを抽出
Trueのところに「合格」と入れる
※9 Trueのところに「合格」と入れる

逆もやります。 「FALSE」のところに「不合格」を入力※10
そいで最後に、フィルタを「すべて」にしてやれば、要求された結果が出ます※11

逆も同様 Falseのところは「不合格」
※10 逆も同様 Falseのところは「不合格」
60点以上は合格、そうじゃないときは不合格
※11 60点以上は合格、そうじゃないときは不合格

これと同じことを、1列でやるのが、if関数なんです※12

if関数再び カンマは半角ですよ
※12 if関数再び カンマは半角ですよ

要するに、両者は同じことなんです。 ただ、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」と表示したい」です。

2枚目のシート
※13 2枚目のシート

ハイ、スタート。

 ・
 ・
…ハイ、では、やり方。
シンプルに考えましょう。
まず、「点数」を「降順」で並べ替えます※14。 「降順」、つまり点数高い方から上から順ね。
そして、「80点以上のゾーン」「79~60のゾーン」「~59のゾーン」で色分けします※15

点数降順で並べ替え あ、そうそう、「no」列を左に追加してます(元の並び順に戻すこともあるかと思って)
※14 点数降順で並べ替え あ、そうそう、「no」列を左に追加してます(元の並び順に戻すこともあるかと思って)
80以上は青、79~60は緑、59~は赤としました
※15 80以上は青、79~60は緑、59~は赤としました

で、色分けに合わせて「A」「B」「C」を入力する※16

ABCを手入力
※16 ABCを手入力

これでおしまい。 仮に生徒が100人いても、この方法ならそんなに手間もなくできるでしょう。

ただ、このやり方に1コだけケチつけると、「80点以上」とか「79~60」とかを目視で判断してるんですよね。 なので、数式でもやってみましょうか。※6~※11のやり方の応用です。
まず、「80点以上かどうか」を調べましょう※17。 式はもう、わかりますね。

80点以上かどうか
※17 80点以上かどうか

で、フィルタをかけ、「TRUE」のところだけ「A」を入れる※18 ※19

=(B2>=80)がTrueならA判定
※18 =(C2>=80)がTrueならA判定
こうなる
※19 こうなる

次。 「60点以上80点未満」を調べます。
ただ、コレ、要件が2つありますね。 「60点以上」と「80点未満」の2つです。
でね、実はExcelは、「○○と○○のあいだの数値」みたいなのを調べるときに、=(60 <= C2 < 80)のようにあいだにはさむ表記はできないんですよ。 おそらく、2つの不等号を同時に処理できない、みたいです。
なので、「60点以上」と「80点未満」の両方を満たす、という意味の式を入れてあげます※20and関数を使って、2つの要件を満たしてあげましょう。

=and(60点以上,80点未満)
※20 =and(60点以上,80点未満)

…そう。
画面と同様に、

=and(C2 >= 60, C2 < 80)

と入れてあげればOK。
こうすれば、「60点以上」かつ「80点未満」という意味になりますので。
あ、そうそう、and式の中に入れる順番は別に「80点未満」「60点以上」の順番でも大丈夫ですよ。 今回はたまたま「60点以上」「80点未満」の順番にした、というだけで。

では今度は、このand式が「TRUE」のところに、「B」を入れてください※21 ※22

and式がTrueのところがB判定
※21 and式がTrueのところがB判定
あとは空白のところを処理すれば…
※22 あとは空白のところを処理すれば…

で、あとは空白のところに「C」を入れれば完成です※23 ※24 ※25。 すばらしいね。

残る空白をフィルタで抽出して…
※23 残る空白をフィルタで抽出して…
C判定を入れて…
※24 C判定を入れて…
フィルタを全表示させればできあがり
※25 フィルタを全表示させればできあがり

…「アレ?60点未満かどうかは調べなくていいの?=(C2<60)とかで」と疑問に思う方もいらっしゃるかもしれませんが、大丈夫です。 「80点以上かどうか」と「79~60かどうか」をすでに調べているのだから、残りは自動的に60点未満なのです。
もちろん、=(C2<60)でわざわざ調べても問題はないですよ。 僕はそんな、ていねいな仕事をする人、キライではありません。

さて、では、もしこの作業、(この章のテーマである)if関数を使うとしたら。
こう↓なります※26

if関数でやると…
※26 if関数でやると…

式、長いなー。
入力した式は、

=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関数のネスト
※27 if関数のネスト

…いかがでしょうか。最後のヤツはけっこうむずかしいですよね。 けど、if関数を使わないで済むやり方もある、ということも、同時にご理解いただけたかと思います。
繰り返しになりますが、ひとつのゴールにたどり着く方法はいろいろです。
もちろん、たくさんルートを知ってる方が便利かもしれません、が、最初はね、ひとつずつ、覚えていきましょうよ。

Copyright(C)森田表計算