入れ子のIFとは、IFの中に別のIFを入れたもので、結果が3つ以上あるときに使います。=IF(B2>=90,"A",IF(B2>=80,"B",IF(B2>=70,"C","F")))は、90以上ならA、80から89ならB、70から79ならC、70未満ならFを返します。
| A | B | C | |
|---|---|---|---|
| 1 | Student | Score | Grade |
| 2 | Ana | 94 | A |
| 3 | Ben | 81 | B |
| 4 | Chloe | 70 | C |
| 5 | Dan | 65 | F |
| 6 | Eve | 88 | B |
| 7 | Finn | 90 | A |
C2をクリックして数式バーを見てください。IF関数が3つあり、最後に閉じかっこが3つ並んでいます。B5のDanの点数を75に変えると、成績がFからCに変わります。
入れ子のIFの読み方
Excelは数式を先頭から読み、最初にTRUEになった条件で止まります:
=IF(B2>=90, "A",
IF(B2>=80, "B",
IF(B2>=70, "C",
"F")))
- 点数は90以上か。それならAで、ほかは何も調べません。
- そうでなければ、80以上か。それならBです。90以上の点数はここまで来ないので、この条件に「かつ90未満」と書く必要はありません。
- そうでなければ、70以上か。それならCです。
- それ以外はFで、最後のIFのvalue_if_falseです。
内側のIFは、それぞれ1つ前のIFのvalue_if_falseの位置にあります。Excelでは64レベルまで入れ子にできますが、4つか5つを超える数式は目で確認するのが大変です。Excelは数式の中の改行を受け付けるので、長い数式は数式バーでこのように並べられます。各IFの前でAlt+Enter(Windows)かControl+Option+Return(Mac)を押します。
条件の順番が大切な理由
Excelは最初にTRUEになった条件で止まるので、>=を使うときはしきい値を高いほうから低いほうへ並べる必要があります。D列は同じ3つの条件を逆の順番にしたものです:
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Student | Score | Right order | Wrong order |
| 2 | Ana | 94 | A | C |
| 3 | Ben | 81 | B | C |
| 4 | Chloe | 70 | C | C |
| 5 | Dan | 65 | F | F |
| 6 | Eve | 88 | B | C |
D列では70以上の全員がCになります。94点は最初の条件B2>=70を満たし、BとAの条件には届きません。低い区分から始めたいなら、演算子を逆にします。=IF(B2<70,"F",IF(B2<80,"C",IF(B2<90,"B","A")))はC列と同じ成績になります。
文字列を使う入れ子のIF
条件では文字列も比べられます。ここでは配送料が地域によって決まり、名前の挙がっていない地域はすべて最後の値になります:
| A | B | C | |
|---|---|---|---|
| 1 | Order | Region | Fee |
| 2 | 1001 | North | $5.00 |
| 3 | 1002 | South | $7.00 |
| 4 | 1003 | West | $9.00 |
| 5 | 1004 | East | $6.00 |
| 6 | 1005 | Islands | $9.00 |
WestとIslandsは3つの条件のどれにも当てはまらず、最後の値$9.00になります。この例のように、すべての条件が同じセルを決まった値と比べているときは、SWITCHを使えば各地域を1回ずつ書くだけで同じ規則になります:=SWITCH(B2,"North",5,"South",7,"East",6,9)。SWITCHのページをご覧ください。
ANDを組み合わせた入れ子のIF
1つの区分が2つのセルで決まるときは、入れ子のIFの各レベルでANDやORを組み合わせられます。売上が2,000以上かつ勤続3年以上の担当者は10%、それ以外で2,000以上なら5%、残りは0です:
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Rep | Sales | Years | Rate |
| 2 | Ana | 2400 | 4 | 10% |
| 3 | Ben | 2100 | 1 | 5% |
| 4 | Chloe | 1500 | 6 | 0% |
| 5 | Dan | 3000 | 3 | 10% |
| 6 | Eve | 900 | 2 | 0% |
AnaとDanは10%の対象で、Benは売上はあっても年数が足りないので5%、ChloeとEveは0%です。ここでも順番が大切で、厳しい条件を先に置きます。
IFS: 入れ子にせずに同じことを
Excel 2019、Excel 2021、Microsoft 365では、IFSが条件と結果を組で受け取ります。内側のIFはなく、閉じかっこも1つです。最後の条件のTRUEは「それ以外すべて」の役目をします:
=IFS(B2>=90,"A",B2>=80,"B",B2>=70,"C",TRUE,"F")
IFSも同じ順番で条件を読み、最初にTRUEになったところで止まるので、上の順番の規則はそのまま当てはまります。どの条件にも当てはまらないときに返る#N/Aも含めて、IFSのページで説明しています。Excel 2016以前ではIFSは使えず、IFSを使ったファイルは#NAME?と表示されます。
練習: 3段階の手数料
| A | B | C | |
|---|---|---|---|
| 1 | Rep | Sales | Commission |
| 2 | Ana | $6,200 | |
| 3 | Ben | $2,400 | |
| 4 | Chloe | $600 |
やってみよう: C2で、B2の売上が5000以上なら売上の10%、1000以上なら5%、それ以外は0を支払うようにしてください。数式はC4まで下にコピーされます。
IFをいくつも使う代わりに検索用の表を使う
区分が数値で、3つか4つを超えるときは、しきい値を小さな表にまとめて検索します。表はしきい値の小さいほうから並べ、近似一致(最後の引数にTRUE)を使うと、点数を超えない最大のしきい値の行が返ります:
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Student | Score | Grade | Min score | Grade | |
| 2 | Ana | 94 | A | 0 | F | |
| 3 | Ben | 81 | B | 70 | C | |
| 4 | Chloe | 70 | C | 80 | B | |
| 5 | Dan | 65 | F | 90 | A | |
| 6 | Eve | 88 | B |
結果はページの最初の入れ子のIFと同じです。Bの区分を85に変えたいならE4を85にします。数式は変えずに、すべての成績が更新されます。XLOOKUPでは同じ検索が=XLOOKUP(B2,$E$2:$E$5,$F$2:$F$5,,-1)になり、-1は「完全一致、なければ次に小さい値」という意味です。この場合、表を並べ替えておく必要はありません。
やってみましょう。区分表はできているので、検索の数式を書いてください。
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Student | Score | Grade | Min score | Grade | |
| 2 | Ana | 86 | 0 | F | ||
| 3 | 70 | C | ||||
| 4 | 80 | B | ||||
| 5 | 90 | A |
やってみよう: C2で、E2:F5の区分表からB2の点数に対応する成績を返してください。
よくある質問
ExcelでIFを複数使うにはどう書きますか?
次のIFを、前のIFのvalue_if_false(偽の場合)の引数に入れます:=IF(B2>=90,"A",IF(B2>=80,"B",IF(B2>=70,"C","F")))。Excelは条件を最初から順に調べ、最初にTRUEになったところで止まります。
ExcelでIF関数はいくつまで入れ子にできますか?
Excel 2007以降では64レベルまでです。ただ、その上限よりずっと手前で数式は読みにくく、確認しにくくなります。区分が3つか4つを超えるなら、近似一致のVLOOKUPやXLOOKUPと検索用の表を使うほうが管理しやすくなります。
入れ子のIFが間違った結果を返すのはなぜですか?
たいていは条件の順番が間違っています。>=の条件では、いちばん高いしきい値から始めます。B2>=70が最初にあると、95点はそこで止まって70の区分の結果になります。
Excelで入れ子のIFの代わりに使えるものは?
Excel 2019以降のIFS(=IFS(B2>=90,"A",B2>=80,"B",TRUE,"F"))、1つの値を決まった値と比べるならSWITCH、数値の区分なら検索用の表と=VLOOKUP(B2,$E$2:$F$5,2,TRUE)です。