- Home »
- エクセル関数の技 »
- IF関数のネスト(入れ子)の方法
作成:2013/1/13,
更新:2020/12/11
- 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