=SWITCH(B2,"N","North","S","South","E","East","Unknown") 依次把 B2 和“N”“S”“E”比较,返回第一个完全匹配的值所对应的名称。B2 和它们都不匹配时,返回最后一个参数 Unknown。
| A | B | C | |
|---|---|---|---|
| 1 | Store | Code | Region |
| 2 | 101 | N | North |
| 3 | 102 | S | South |
| 4 | 103 | W | Unknown |
| 5 | 104 | E | East |
| 6 | 105 | n | North |
点击 C2 查看公式。103 号店的代码是 W,不在列表中,所以得到 Unknown。105 号店是小写的 n,仍然得到 North:SWITCH 匹配文本时不区分大小写。把 B4 改成 S,地区也会更新。
SWITCH 的语法
=SWITCH(expression, value1, result1, [value2, result2], ..., [default])
expression只计算一次:可以是一个单元格,也可以是WEEKDAY(A2)或MONTH(A2)这样的公式。- 接下来是成对的值和结果:
expression等于这个值时,返回对应的结果。最多可以有 126 对。 default是可选的:最后一对之后多出的一个参数。SWITCH 知道它是默认值,因为它没有配对的参数。- 匹配必须完全相同。SWITCH 本身不能判断“大于”(见下文的 SWITCH(TRUE))。
SWITCH 需要 Excel 2019 或更高版本,或者 Microsoft 365。在永久授权版 Excel 2016 及更早的版本中,含 SWITCH 的公式会显示 #NAME?。Google 表格也有 SWITCH。
默认值,以及没有默认值时的 #N/A
没有默认值时,什么都不匹配的值会得到 #N/A。下面把 WEEKDAY 返回的星期数字(1 表示星期日,7 表示星期六)转换成标签;C 列没有默认值,D 列的默认值是“Weekday”:
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Date | Day number | No default | With default |
| 2 | 2026-03-14 | 7 | Saturday | Saturday |
| 3 | 2026-03-15 | 1 | Sunday | Sunday |
| 4 | 2026-03-16 | 2 | #N/A | Weekday |
| 5 | 2026-03-17 | 3 | #N/A | Weekday |
| 6 | 2026-03-21 | 7 | Saturday | Saturday |
2026 年 3 月 14 日和 21 日是星期六,3 月 15 日是星期日,所以两列都给出了名称。星期一和星期二既不是 1 也不是 7:C 列显示 #N/A,D 列显示 Weekday。D 列还说明表达式可以是一个公式:WEEKDAY 只运行一次,SWITCH 再把它的结果和每个值比较。
用 SWITCH(TRUE, ...) 判断范围
SWITCH 只检查是否相等,但表达式可以是 TRUE。这时每个值都是一个比较,SWITCH 返回第一个等于 TRUE 的比较所对应的结果。这样它就和 IFS 一样工作,并且末尾还有默认值:
| 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 |
比较是按顺序读取的,所以最高的界限要放在最前面,这和嵌套 IF 以及 IFS 的规则一样。最后的“F”没有配对,所以它是低于 70 分的所有成绩的默认值。IFS 写出同样的规则也一样清楚;唯一的区别是 TRUE 的位置:在 SWITCH 中写在开头一次,在 IFS 中作为最后一个测试。
把数字映射成名称
一个常见的用法是把代码数字变成文字,比如把名次变成奖牌:
| A | B | C | |
|---|---|---|---|
| 1 | Runner | Rank | Medal |
| 2 | Ana | 2 | Silver |
| 3 | Ben | 1 | Gold |
| 4 | Chloe | 4 | |
| 5 | Dan | 3 | Bronze |
| 6 | Eve | 7 |
Chloe 和 Eve 没有进入前三名,所以得到默认值,即空文本。如果代码是 1、2、3 这样没有间断的数字,CHOOSE 写起来更短:=CHOOSE(B2,"Gold","Silver","Bronze"),但它没有默认值,对 4 及以上的数字会返回 #VALUE!。
练习:状态代码
| A | B | C | |
|---|---|---|---|
| 1 | Invoice | Code | Status |
| 2 | INV-01 | P | |
| 3 | INV-02 | U | |
| 4 | INV-03 | X | |
| 5 | INV-04 | P |
轮到你了: 在 C2 中用 SWITCH 把 B2 中的代码变成文字:P 是“Paid”,U 是“Unpaid”,其他代码都是“Check”。公式会向下填充到 C5。
SWITCH、IFS 和嵌套 IF 的对比
三者都从多个结果中返回一个;区别在于它们检查什么。
| SWITCH | IFS | 嵌套 IF | |
|---|---|---|---|
| 检查内容 | 一个表达式是否相等 | 每一对可以是任意条件 | 每一层可以是任意条件 |
| 默认值 | 最后一个参数,可选 | 最后一对 TRUE | 最后一个 IF 的假值 |
| 不匹配且没有默认值 | #N/A | #N/A | FALSE(最后一个 IF 没有 value_if_false 时) |
| 重复写单元格 | 否:B2 只写一次 | 是:B2="N"、B2="S"... | 是 |
| Excel 2016 及更早版本 | #NAME? | #NAME? | 可以用 |
把一个单元格或一个公式和一列固定的值(代码、星期数字、月份)比较时,用 SWITCH;它最短,而且表达式只运行一次。每个测试是不同的比较或读取不同的单元格时,用 IFS。文件必须能在 Excel 2016 或更早版本中打开时,用嵌套 IF。如果代码列表很长或经常变化,就把它放进一张两列的表中,改用 XLOOKUP 查找,这样新增一个代码只需添加一行,而不用修改每个公式。
常见问题
Excel 中的 SWITCH 函数是做什么的?
它把一个表达式和一列值比较,返回第一个完全匹配的值所对应的结果。=SWITCH(B2,1,"Gold",2,"Silver",3,"Bronze","") 把名次变成奖牌名称,其他名次则返回空文本。
SWITCH 为什么返回 #N/A?
表达式和所有值都不匹配,而且没有默认值。在最后一对参数后面再加一个参数,比如 "Other",SWITCH 就会返回它,而不是 #N/A。
SWITCH 能判断“大于”这样的范围吗?
不能直接判断,因为它只检查是否相等。把 TRUE 作为表达式,把比较作为值:=SWITCH(TRUE,B2>=90,"A",B2>=80,"B","F") 返回第一个结果为 TRUE 的比较所对应的结果。
Excel 2016 中有 SWITCH 函数吗?
只有 Microsoft 365 版本的 Excel 2016 才有。Excel 2019、Excel 2021、Excel 2024 和 Microsoft 365 中都有 SWITCH;永久授权版 Excel 2016 及更早的版本会显示 #NAME?,这些版本中请用嵌套 IF 或 CHOOSE。