IF関数の機能
IF関数は、論理式に指定されたセルの値がtrueのとき、falseのときによって返す値を変える機能を持つ関数です。
IF関数は、もし○○だったら、セルに××を表示させたい、というような条件によってセルに表示させるものを変えたいときにIF関数は使われます。処理の分岐は、論理式の結果がtrue(真)かfalse(偽) かにより分岐します。
IF関数の書式
IF関数は引数が必ず3つになる、3つの引数をもつことがポイントです。
また、式1と式2はIF関数の構造上、同時に処理をされない、必ずどちらかが処理をされることになります。せっかく引数を指定しても、式1か式2のどちらかが使われないことを考えると、IF関数は特殊な関数ではあります。
IF関数の実行例
A | B | C | D | E | |
1 | 受験番号 | 点数 | IF関数文字列 | 結果 | |
---|---|---|---|---|---|
2 | ID001 | 90 | IF(B2≧80,'合格','不合格') | 合格 | |
3 | ID002 | 80 | IF(B3≧80,'合格','不合格') | 合格 | |
4 | ID003 | 79 | IF(B4≧80,'合格','不合格') | 不合格 | |
5 | ID004 | 70 | IF(B5≧80,'合格','不合格') | 不合格 | |
6 | |||||
7 |
A列に適当な文字列、B列に数値、D列に結果、C列に関数の文字列があるとします。B列の数値によって決められた文字列を返したいとします。具体的にはB列の数値が80以上ならば合格、80未満なら不合格とD列に表示したいとします。
IF関数は引数に文字列を扱うことができます。もし文字列を扱う場合はシングルクォーテーション「'」で囲います。2行目を見てみます。文字列を扱うIF関数はどのように書くのかというと、
IF(B2≧80,'合格','不合格')
と書きます。IF関数はカンマ「,」が区切りですから、分けて考えると、
引数1は B2≧80
引数2は '合格'
引数3は '不合格'
となります。
セルB2は90となっているので、論理式の条件を満たします。条件を満たす場合はIF関数では引数2を返す、となっているので結果、引数2の'合格'が表示されることになります。
次に4行目のB4を見てみましょう。セルB4は79なので論理式の条件を満たしません。その結果、IF関数により引数3の'不合格'が表示されることになります。
IF関数の動きは重要なのでここで理解してください。
結果の引数が式の場合
IF関数の他のケース、引数が式だった場合を見てみましょう。
A | B | C | D | |
1 | 選択 | 半径 | IF関数文字列 | 結果 |
---|---|---|---|---|
2 | 円周 | 10 | IF(A2='円周',B2*2*3.14,B2*B2*3.14) | 62.8 |
3 | 面積 | 3 | IF(A3='円周',B3*2*3.14,B3*B3*3.14) | 28.26 |
4 | 面積 | 5 | IF(A4='円周',B4*2*3.14,B4*B4*3.14) | 78.5 |
5 | ||||
6 |
A列に文字列、B列に数値、D列に結果、C列に関数の文字列があるとします。A列で円周か面積かを選択し、もし円周ならB列の半径をもとに円周を計算し、面積なら半径から面積を計算して結果をD列に表示するとします。
このときIF関数はどのように入力するのかというと、
IF(A2='円周',B2*2*3.14,B2*B2*3.14)
と書きます。IF関数はカンマ「,」が区切りですから、分けて考えると、
引数1は A2='円周'
引数2は B2*2*3.14
引数3は B2*B2*3.14
となります。
引数1の論理式は文字列も扱うことができたので「A2='円周'」という文字列を比較する書き方も可能です。
引数2と3は計算式を引数に持っています。内容は、円の円周を求める式と、円の面積を求める計算式です。IF関数の引数2と引数3は式を指定することができるのが書式で決まっています。
2行目を見てみましょう。A2が円周と選択されているので、IF関数の条件ではtrue(真)になり、真の場合は引数2が表示されます。このとき、引数2は計算式が指定されているので、「B2*2*3.14」が計算され、結果62.8がD2に表示されています。
3行目も同様です。セルA3で面積と指定されているのでIF関数の条件はfalse(偽)になり、引数3が計算され、結果28.26がセルD3に表示されます。
IF関数は数値でも文字列が条件でも判断ができるし、表示する値は、計算式でも文字列でも引数に与えて返すことができる、ということを覚えておいて下さい。
異なる条件式で同じ結果
表計算には論理式という式がありました。論理式というのは結果が論理値になる式です。論理値というのはtureかfalseになる値でした。論理式の条件として比較演算子が用いられることがあるのはお話した通りです。
ところで、上のほうで合格、不合格を判定するIF関数をやりましたが、
IF(A1≧80,'合格','不合格')と
IF(80≦A1,'合格','不合格')は関数として同じでしょうか。
A1に何か値を与えてみると分かりやすいです。A1を90としてみましょう。90≧80でtureです。80≦90でもtureで、同じ結果なので問題なさそうです。演算子を反対にすれば、条件式を入れ替えてもよさそうです。
次に
IF(A1≧80,'合格','不合格')と
IF(A1<80,'不合格','合格')ではどうでしょうか。
今度は比較演算子の右と左は位置が同じで、演算子が「≧」と「<」とで変わっています。さらに引数2と3の位置が逆になっています。演算子が違うんだから違うに決まっているんじゃ?と思いませんか?
結論から言うと、このIF関数は同じ結果になります。条件式が逆の書き方で選択肢が与えられたりしていて、情報処理試験問題ではよく問われる書かれ方です。
条件式のA1に何か当てはめてみます。80とします。80≧80でtrueになり、80<80でfalseになります。しかし、引数の2と3が'合格'と'不合格'と両者は入れ替わっているので、結果としてどちらも'合格'が表示されることになり、この条件式を逆にした書き方は、同じ処理を行うことができるということになります。同じ処理で違う書き方があるということは知っておいて下さい。
IF(A1≧80,'合格','不合格')の数直線
IF(A1<80,'不合格','合格')の数直線
数直線で表すとイメージがわきやすいですね。情報処理技術者試験では解答欄には異なる条件式だけれども、同じ結果の選択肢が与えられることがあります。これを知っておかないと「あれ?求めた解答が選択肢にない」となって焦ります。引っかからないようにしましょう。
IF関数の入れ子
これまでのIF関数は、ある条件があって、条件を見たところから真か偽かを判断する、二者択一のケースでみてきました。しかし、IF関数の引数2と引数3は、数値や文字列だけではなく、計算式を指定することができます。式が指定できるので、IF関数の中に他のIF関数を引数にすることが可能です。関数の中に関数を入れるイメージです。
関数の中に関数を入れることを、「ネスト」とか「入れ子」とか言いますが、この節ではネストにいてのお話です。
関数のネストはIF関数内で複数の条件を記述することができるので、割と複雑な処理ができますが、かえって読みにくくなるというデメリットがあり、一長一短です。
例えば以下の条件をIF関数で表してみます。
- 定価100円の商品を、1回の注文数に応じて割引した後の金額を表示する。
- ・100個以上 8%割引で販売
- ・60個以上~100個未満 5%割引で販売
- ・1個~60個未満 定価で販売
判断する条件は3つになり、今までの二者択一のIF関数では処理することができません。この条件をIF関数でネストする必要がでてきました。本当はネストせずに条件を満たす関数を書くこともできますが、今回はネストの練習を兼ねているので、あえてネストする方法で書きます。
まず、頭の中か紙に数直線を書いて図にして条件を整理してみてください。
まず、注文数の数量が入力されているA1が100個以上かどうかで判断され、100個以上なら8%の割引、それ以外ならまたIF関数でA1を条件を判断し、60個以上なら5%の割引に、それ以外なら何も計算せず値を返す、というのが処理の流れになります。
この流れを実行したのがこちら。
A | B | C | |
1 | 注文数 | IF関数文字列 | 結果 |
---|---|---|---|
2 | 59 | IF(A2≧100,A2*100*0.92,IF(A2≧60,A2*100*0.95,A2*100)) | 5900 |
3 | 60 | IF(A3≧100,A3*100*0.92,IF(A3≧60,A3*100*0.95,A3*100)) | 5700 |
4 | 99 | IF(A4≧100,A4*100*0.92,IF(A4≧60,A4*100*0.95,A4*100)) | 9405 |
5 | 100 | IF(A5≧100,A5*100*0.92,IF(A5≧60,A5*100*0.95,A5*100)) | 9200 |
6 | 120 | IF(A6≧100,A6*100*0.92,IF(A6≧60,A6*100*0.95,A6*100)) | 11040 |
7 |
A列に注文数量、C列に結果、B列にネストのIF関数の文字列を表示しています。
定価が100で、8%の割引の場合は、0.92と定価100を掛けて、5%割引の場合は、0.95と定価100を掛け、割引をしない場合は、定価の100を描けて計算するのが割引についての計算になります。
2行目を見てみます。
IF(A2≧100,A2*100*0.92,IF(A2≧60,A2*100*0.95,A2*100))
こういう書き方になるのですが、長いですね。分けて考えてみます。カンマ「,」に注目して、一つ目のIF関数は
IF(A2≧100,A2*100*0.92,引数3)
とA2の値が100個以上の条件が、true(真)とfalse(偽)の時のIF関数を入力しています。tureのときは8%割引で計算し、100個未満の時は、引数3へ保留させます。
引数3の中は、また別の条件で判断させるので、IF関数をさらに追加します。
引数3:IF(A2≧60,A2*100*0.95,A2*100)
60個以上でtrue(真)だった場合、5%割引計算をして、60未満だった場合、定価で計算するというIF関数を追加します。これが1つ目のIF関数の引数3に式の引数として与えられることによって、IF関数がネストするかたちになり、割引の処理ができます。関数をはめ込んているようなイメージです。はめ込んだ結果、長いIF関数が出来上がることになります。
3行目以降はパターンが同じで、注文数に応じて割引された後の金額になっているのを確認してください。
条件を入れ子にすることによって、100個の条件がfalse(偽)ということは100個未満になり、その中からさらに60個以上の条件がtrue(真)の条件になることによって、数直線の60個≦A1<100個の条件を作り上げ、その条件のなかで処理をすることができます。
この例の場合のネストは、IF関数の中のIF関数という2重のネストでしたが、さらにIF関数の中のIF関数の中のIF関数の…と2重、3重といくらでも条件によって増やすことができます。