=IFS(B2>=90,"A",B2>=80,"B",B2>=70,"C",TRUE,"F") 从第一个到最后一个依次检查条件,返回第一个为 TRUE 的条件所对应的值。它能做嵌套 IF 能做的事,却不用把一个 IF 放进另一个 IF 里。IFS 需要 Excel 2019 或更高版本,或者 Microsoft 365。
| 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:四组条件和结果,只有一个右括号。把 B4 中 Chloe 的分数改成 69,她的等级就会降到 F。
IFS 语法
=IFS(logical_test1, value_if_true1, [logical_test2, value_if_true2], ...)
- 参数成对出现:先是一个得出 TRUE 或 FALSE 的条件,然后是它为 TRUE 时要返回的值。
- Excel 按顺序检查条件,返回第一个为 TRUE 的条件所对应的值。之后的条件不会再检查,所以用
>=判断时,要把最高的门槛放在最前面。 - 最多可以有 127 对。
- 没有单独的“否则”参数。用
TRUE作为条件的最后一对就能起到这个作用。
如果某个条件缺少对应的值(参数个数为奇数),Excel 会拒绝这个公式,并提示“此函数输入的参数太少”。
用 TRUE 作为默认值,以及没有匹配时的 #N/A
如果没有任何条件为 TRUE,IFS 就返回 #N/A。下面的 C 列没有默认值,遇到两个低分就出错了;D 列以 TRUE,"F" 结尾,把它们接住了:
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Student | Score | No default | TRUE default |
| 2 | Ana | 94 | A | A |
| 3 | Ben | 81 | B | B |
| 4 | Dan | 65 | #N/A | F |
| 5 | Eve | 88 | B | B |
| 6 | Gus | 52 | #N/A | F |
#N/A 要查找的值不在查找范围内。TRUE 是一个永远成立的条件,所以只有前面的每个条件都为 FALSE 时才会轮到它,而且它必须是最后一对:它后面的内容永远不会被检查。默认值可以是任何值:TRUE,"" 显示空单元格,TRUE,"Check" 给这一行做标记。如果不想设默认值,又不想让 #N/A 露出来,=IFNA(IFS(...),"No grade") 也可以;IFNA 的讲解见 IFERROR 一文。
IFS 判断文本,以及搭配 AND 或 OR
条件就是普通的逻辑表达式,所以可以比较文本,也可以使用 AND 和 OR。这里的配送方式取决于地区和订单金额:
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Order | Region | Total | Delivery |
| 2 | 1001 | North | $120 | Free |
| 3 | 1002 | North | $60 | Standard |
| 4 | 1003 | South | $150 | Express |
| 5 | 1004 | East | $40 | Post |
| 6 | 1005 | north | $300 | Free |
订单 1001 是 North 且金额超过 100,所以得到 Free。订单 1002 是 North 但金额不到 100,所以第一个条件不成立,第二个条件 B2="North" 给出 Standard。文本比较不区分大小写,所以写成 north 的 1005 也得到 Free。
如果每个条件都是把同一个单元格和某个固定值比较(B2="N"、B2="S"、B2="E"),用 SWITCH 只需把每个值列一次,写起来更短:=SWITCH(B2,"N","North","S","South","Other")。
练习:配送速度
| A | B | C | |
|---|---|---|---|
| 1 | Order | Days | Speed |
| 2 | 1001 | 3 | |
| 3 | 1002 | 1 | |
| 4 | 1003 | 7 | |
| 5 | 1004 | 2 | |
| 6 | 1005 | 5 |
轮到你了: 在 C2 中,当 B2 中的天数小于等于 1 时返回 "Express",小于等于 3 时返回 "Standard",否则返回 "Slow"。请使用 IFS。公式会向下填充到 C6。
IFS 与嵌套 IF 对比
下面两个公式对每个分数返回的等级都相同:
=IF(B2>=90,"A",IF(B2>=80,"B",IF(B2>=70,"C","F")))
=IFS(B2>=90,"A",B2>=80,"B",B2>=70,"C",TRUE,"F")
| IFS | 嵌套 IF | |
|---|---|---|
| 括号 | 一对 | 每个 IF 一对 |
| 默认值 | 最后一对 TRUE | 最后一个 IF 的 value_if_false |
| 没有条件匹配时 | #N/A,除非加上 TRUE | 最后一个 IF 的 value_if_false(省略时为 FALSE) |
| 上限 | 127 对 | 嵌套 64 个 IF |
| Excel 2016 及更早版本 | #NAME? | 可以使用 |
如果打开文件的每个人都使用 Excel 2019 或更高版本,就用 IFS;如果文件要发给使用旧版 Excel 的人,就用嵌套 IF。只有两种结果时,普通的 IF 比这两者都简单。对于很多个数值区间(税率档次、运费重量档),两者都不是最好的工具:用带近似匹配的查找表,可以把门槛值放在单元格里,嵌套 IF 一文演示了这种做法。
常见问题
怎样给 IFS 加上“否则”的值?
让最后一个条件为 TRUE,它永远成立:=IFS(B2>=90,"A",B2>=80,"B",TRUE,"F")。前面所有条件都不满足的值都会得到 F。
IFS 为什么返回 #N/A?
没有任何条件为 TRUE,而且末尾没有 TRUE 这一对。=IFS(B2>=90,"A",B2>=80,"B") 对 75 分会返回 #N/A。在末尾加上 TRUE,"F",或者用 IFNA 包住公式。
哪些 Excel 版本有 IFS?
Excel 2019、Excel 2021、Excel 2024 和 Microsoft 365,以及网页版 Excel。在 Excel 2016 及更早版本中,含 IFS 的公式会显示 #NAME?,所以要改用嵌套 IF。Google 表格也有 IFS。
IFS 比嵌套 IF 更好吗?
它更容易读,而且只有一个右括号,但工作方式相同:第一个为 TRUE 的条件胜出。如果文件必须在 Excel 2016 或更早版本中打开,仍然要用嵌套 IF。