嵌套 IF 就是在一个 IF 里面再放一个 IF,用于可能的结果多于两个的情况。=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 函数,末尾三个右括号。把 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 都位于前一个 IF 的 value_if_false 位置上。Excel 最多允许 64 层,但超过四五层的公式就很难用肉眼检查了。Excel 允许在公式中换行,所以你可以在编辑栏中把长公式排成上面这样:在每个 IF 前面按 Alt+Enter(Windows)或 Control+Option+Return(Mac)。
为什么条件的顺序很重要
因为 Excel 在第一个为 TRUE 的判断处就停止,所以使用 >= 时,门槛必须从高到低排列。D 列用相反的顺序写了同样的三个判断:
| 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 不符合三个判断中的任何一个,所以得到最后的值 $9.00。像这里这样,每个判断都是把同一个单元格与一个固定值比较时,SWITCH 可以把每个地区只写一次,表达同样的规则:=SWITCH(B2,"North",5,"South",7,"East",6,9)。见 SWITCH 页面。
嵌套 IF 搭配 AND
当某个区间取决于两个单元格时,嵌套 IF 的各层可以结合 AND 或 OR 使用。销售额达到 2,000 且至少工作 3 年的销售员得到 10%,其他销售额超过 2,000 的人得到 5%,其余的人没有提成:
| 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,只有一个右括号。把 TRUE 作为最后一个判断,就表示“其他所有情况”:
=IFS(B2>=90,"A",B2>=80,"B",B2>=70,"C",TRUE,"F")
它按同样的顺序读取条件,遇到第一个为 TRUE 的条件就停止,所以上面关于顺序的规则仍然适用。IFS 页面 详细介绍了它,包括没有任何判断匹配时返回的 #N/A。Excel 2016 及更早版本没有 IFS,使用它的文件在这些版本中会显示 #NAME?。
练习:三档提成
| 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
当区间是数字并且多于三四个时,把门槛放在一个小表格中查找。表格按门槛从低到高排序,近似匹配(最后一个参数为 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 层。远在达到这个上限之前,公式就已经难以阅读和检查了;超过三四个区间时,使用近似匹配的 VLOOKUP 或 XLOOKUP 配合查找表更容易维护。
我的嵌套 IF 为什么返回了错误的结果?
通常是因为条件的顺序不对。使用 >= 判断时,要从最高的门槛开始:如果 B2>=70 放在最前面,95 分就会停在那里,得到 70 分区间的结果。
在 Excel 中可以用什么代替嵌套 IF?
Excel 2019 及更高版本中可以用 IFS(=IFS(B2>=90,"A",B2>=80,"B",TRUE,"F"));把一个值与若干固定值比较时用 SWITCH;数值区间则用查找表配合 =VLOOKUP(B2,$E$2:$F$5,2,TRUE)。