Deprecated : The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
IF関数のネスト(入れ子)の方法:Excel関数の技
Home »
エクセル関数の技 »
IF関数のネスト(入れ子)の方法
更新:2020/12/11;作成:2013/1/13
Excel2003以前では最大7個となっていましたが、Excel2007,Excel2010では64個となっています。
IF関数で多くの条件を使うことが可能にはなったのですが、数式の可読性が悪くなります。
多くの条件で分けたい場合は、リストを作成するなどしてLOOKUP関数、VLOOKUP関数、HLOOKUP関数を使うことをお勧めします。
また、Excel2019,Excel for Microsoft 365 ではIFS関数を使用することができます。
詳細は IFS関数の使い方(IFのネストが簡潔になります):Excel関数 をご覧ください。
ネスト(入れ子)の一例としては以下のような数式が挙げられます。
=IF(論理式1, [真の場合1], IF(論理式2, [真の場合2], IF(論理式3, [真の場合3], [偽の場合3]) ) )
つまり、[偽の場合]の部分に次の条件を入れて処理していきます。
逆に真の場合に入れることもできますが、ちょっと理解しづらいかもしれません。
練習1
得点が0以上30以下は×、60以下は△、60を超え100以下は○と評価することにします。
B
C
D
2
名前
得点
評価
3
井上
80
○
4
上野
54
△
5
内田
30
×
6
榎田
15
×
7
岡本
77
○
8
大野
91
○
条件の付け方によって数式はいろいろなものができます。
得点の低い方から順番に処理してみます。
30点以下は×とすると、以下のようになります。
=IF(C3<=30,"×", 偽の場合)
次に60点以下は△とします。「偽の場合」の部分に書きます。
=IF(C3<=30,"×", IF(C3<=60,"△",偽の場合) )
となり、ここで偽となるのは60を超える得点ですので、「60を超え100以下は○」を入れることになり、
=IF(C3<=30,"×",IF(C3<=60,"△", "○") )
で、完成です。
得点が未入力(C列が未入力)の場合があると、×となりますので、その処理を加えます。
未入力の場合は30以下に含まれてしまいますので、一番最初に書いて処理する必要があります。
=IF(C3="","" ,IF(C3<=30,"×",IF(C3<=60,"△","○")))
となります。
得点の大きい方から処理するケースは?
今回は、空白の処理から始めます。
=IF(C3="","" ,偽の場合)
60を超えたら○としますので、
=IF(C3="","" ,IF(C3>60,"○",偽の場合) )
30を超えたら△とします。
=IF(C3="","",IF(C3>60,"○", IF(C3>30,"△",偽の場合) )
これらの条件に当てはまらないのは×となりますので、
=IF(C3="","",IF(C3>60,"○", IF(C3>30,"△","×") )
となります。
なお、空白の処理を最後に持ってくると、以下のように書くこともできます。
=IF(C3>60,"○",IF(C3>30,"△",IF(C3="","","×") ))
各区分ごとに判定すると考えると・・・
各区分の条件は
0以上30以下:AND(C3>=0,C3<=30)
30を超えて60以下:AND(C3>30,C3<=60)
60を超えて100以下:AND(C3>60,C3<=100)
と書くことができますので、これをIF関数に入れ込みます。
すると、
=IF(AND(C3>=0,C3<=30),"×" ,IF(AND(C3>30,C3<=60),"△" ,IF(AND(C3>60,C3<=100),"○","") ))
のようになります。
このケースでは順序が変わっても問題はなく、
=IF(AND(C3>30,C3<=60),"△", IF(AND(C3>=0,C3<=30),"×", IF(AND(C3>60,C3<=100),"○","") ))
としても結果は同じですが、解読がしずらいので順番に書いた方がよろしいかと思います。
上記A〜Cとは異なった考え方
=IF(C3<>"",IF(C3<=60,IF(C3<=30,"×","△"),"○"),"")
といった数式にすることもできます。 しかし、このように[真の場合]に入れ子としていくのは、ちょっと理解しづらいかもしれません。
上記のように、どのような条件にするのか、その着目するところによってさまざまな数式が作成できます。
分かりやすいのは、大きい方または小さい方から順次処理していく方法だと思います。
練習2
得点が90以上のときは「とてもよい」、75以上のときは「よい」、50以上のときは「ふつう」、50未満の時は「がんばれ」と表示しなさい。
B
C
D
2
名前
得点
評価
3
井上
80
よい
4
上野
54
ふつう
5
内田
30
がんばれ
6
榎田
15
がんばれ
7
岡本
77
よい
8
大野
91
とてもよい
解答例
90以上は「とてもよい」 =IF(C3>=90,"とてもよい", ・・・・)
75以上は「よい」 IF(C3>=75,"よい", ・・・・)
50以上は「ふつう」 IF(C3>=50,"ふつう", ・・・・)
50未満は「がんばれ」 IF(C3<50,"がんばれ", ・・・・) としたくなりますが、上記1〜3を満たさないときとも解釈できます。
よって、上記の3と一緒に IF(C3>=50,"ふつう","がんばれ") として対処できます。
これらの数式の・・・・部分に、次の数式を入れれば完成となります。
=IF(C2>=90,"とてもよい", IF(C2>=75,"よい", IF(C2>=50,"ふつう","がんばれ") ) )
D3セルに =IF(C2>=90,"とてもよい", IF(C2>=75,"よい", IF(C2>=50,"ふつう","がんばれ") ) ) と入力して、下方向に数式をコピーします。
このページのタイトルからは脱線してしまいますが、条件分岐にはIF関数がよくつかわれますが、他の関数でも数式を作ることができます。
問題1
上記と同じ問題です。
得点が0以上30以下は×、60以下は△、60を超え100以下は○と評価することにします。
B
C
D
2
名前
得点
評価
3
井上
80
○
4
上野
54
△
5
内田
30
×
6
榎田
15
×
7
岡本
77
○
8
大野
91
○
条件は3つあって、それぞれで分岐できればよいのですからCHOOSE関数を使う方法も考えられます。
CHOOSE関数の構文は=CHOOSE(インデックス,値1,値2,値3・・・)ですので
=CHOOSE(インデックス,"×","△","○") となるような「インデックス」を作成します。
0以上で1point、30を超えたら1point、60を超えたら1pointと加算することで可能と考えました。
(C3>=0)+(C3>30)+(C3>60) と論理和を求めることにします。
例えば、得点が50なら
(C3>=0)+(C3>30)+(C3>60) は (True)+(True)+(False) = 1+1+0 = 2
といった計算結果になります。
数式は =CHOOSE((C6>=0)+(C6>30)+(C6>60),"×","△","○") となります。
なお、CHOOSE関数のインデックスには、1〜254の数値、または1〜254 の数値を返す数式またはセル参照を指定することができます。
IF関数でのネストして作成する例とCHOOSE関数で作成した例で違いを見てみます。
問題例:A1セルの値が「1のときはAを表示、2のときはBを表示、3のときはCを表示、4のときはDを表示する。それ以外はXを表示する」
=IF(A1=1,"A",IF(A1=2,"B",IF(A1=3,"C",IF(A1=4,"D","X"))))
=CHOOSE(A1,"A","B","C","D") とシンプルな数式になります。
しかし、CHOOSE関数では「それ以外はXを表示する」といった処理ができませんので、この部分はIF関数を利用します。
=IF(OR(A1="",A1>4),"X",CHOOSE(A1,"A","B","C","D")) としました。
問題2
得点が80以上は5、70以上は4、60以上は3、40以上は2、それ以外は1 と5段階表示したい。
B
C
D
2
名前
得点
評価
3
井上
80
5
4
上野
54
2
5
内田
30
1
6
榎田
51
2
7
岡本
77
4
8
大野
60
3
IF関数での解答例
=IF(C2>=80,5,IF(C2>=70,4,IF(C2>=60,3,IF(C2>=40,2,1))))
論理和を使って求めることができます。
=(C3>=0)+(C3>=40)+(C3>=60)+(C3>=70)+(C3>=80)
LOOKUP関数で求めることもできます。
=LOOKUP(C3,{0,40,60,70,80},{1,2,3,4,5})
VLOOKUP関数で求めることもできます。
=VLOOKUP(C3,{0,1;40,2;60,3;70,4;80,5},2)
MATCH関数で求めることもできます。
=MATCH(C3,{0,40,60,70,80})
5段階評価で1〜5と数値を返す例でしたので、上記のようにシンプルな数式になりました。
では、返す値が文字列であったら?
A,B,C,D,Eの文字列で評価することにします。
B
C
D
2
名前
得点
評価
3
井上
80
A
4
上野
54
D
5
内田
30
E
6
榎田
51
D
7
岡本
77
B
8
大野
60
C
IF関数での解答例
=IF(C3>=80,"A",IF(C3>=70,"B",IF(C3>=60,"C",IF(C3>=40,"D","E"))))
論理和を使って求めることができます。
=CHOOSE((C3>=0)+(C3>=40)+(C3>=60)+(C3>=70)+(C3>=80),"E","D","C","B","A")
=MID("EDCBA",(C3>=0)+(C3>=40)+(C3>=60)+(C3>=70)+(C3>=80),1)
LOOKUP関数で求めることもできます。
=LOOKUP(C3,{0,40,60,70,80},{"E","D","C","B","A"})
VLOOKUP関数で求めることもできます。
=VLOOKUP(C3,{0,"E";40,"D";60,"C";70,"B";80,"A"},2)
INDEX関数とMATCH関数で求めることもできます。
=INDEX({"E","D","C","B","A"},0,MATCH(C3,{0,40,60,70,80}))
スポンサードリンク
よねさんのWordとExcelの小部屋 »
エクセル関数の技 »
IF関数のネスト(入れ子)の方法
PageViewCounter
Since2006/2/27