- 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