# IF 怎么判断：一个条件给两种结果，多个条件该按什么顺序问

IF 三个参数怎么写、嵌套 IF 做分段判断时条件顺序为什么不能乱、>= 与 > 的边界差在哪，以及数字被存成文本为什么让整列判断都错

> Excel 函数基础 · Excel 公式与引用 · 约 6 分钟 · 10 月 05 日

## 本篇要点

1. IF 函数有三个空：一个能算出 TRUE/FALSE 的逻辑判断、成立时返回什么、不成立时返回什么；第三个空省略时返回 FALSE，要空白就写 ""。
2. 嵌套 IF 是判断从外往内一层层走，某一层成立就立刻返回并停下，里面剩下的条件不再执行——这是条件顺序决定结果的唯一原因。
3. 分段判断的通用规则是：每一层问的条件必须是当前尚未被排除的区间里最靠边的那一端；用 >= 就从高档往低推，用 < 就从低档往上推，两种写法等价，“从小到大”指的是后者的门槛值排序。
4. 把宽条件（如 >=60）放在第一层，会让所有人先被它拦住，后面更严的档位永远执行不到；检验办法是拿 89、90、59、60 这些贴边值试一遍。
5. >= 与 > 差一个边界值，题目说“及以上”和“超过”是两种情况，这是分段判断最常见的丢分点。
6. 文本和数字比较时先比类型，类型顺序是数字 < 文本 < 逻辑值，所以只要有一边是文本它就大于任何数字，"5">60 为 TRUE。
7. 数字被存成文本时，整列的大小判断会全部失真，可看对齐方向、绿色三角或 ISTEXT 识别，用分列或 VALUE 转回数字。
8. 公式里的字符串定界符必须是英文半角双引号，中文全角引号不被识别。
9. IFS 能替代嵌套 IF，但只在 Office 2019 和 Microsoft 365 中可用，Office 2016 一次性买断版没有该函数。

---

上一篇解决的是“公式里的引用该不该跟着公式走”。可引用写得再对，如果判断本身写错了，结果照样是错的——Excel 里做判断的核心工具就是 `IF`。这篇讲清楚三件事：`IF` 的三个空分别放什么，嵌套 `IF` 做分段判断时为什么条件顺序不能乱，以及数字被存成文本时为什么会让判断全错。

它们和上一篇有直接关系：`IF` 的第一个空里通常要引用别的格子，比如分数线、税率这种只写在一个单元格里的值，往下拖的时候同样要用 `$` 锁住。

## IF 只有三个空

语法长这样：

```
=IF(逻辑判断, 成立时返回什么, 不成立时返回什么)
```

看两个官方示例 [1]：

```
=IF(C2>B2,"超出预算","正常")
=IF(C2>B2,C2-B2,0)
```

第一个空不是“问句”，而是一个**能算出 TRUE 或 FALSE 的表达式**。`C2>B2` 本身就是个算式，它的结果只有两种：TRUE 或 FALSE。`IF` 拿到这个结果，再决定返回第二个空还是第三个空。

第二、第三个空可以直接写一个值，也可以写另一个公式（第二个例子里写的是 `C2-B2`，一个减法）。

两个容易卡住的小地方：

- 返回**文本**必须加双引号，写成 `"正常"`；返回数字不用。
- 第三个空**可以省略**，但省略后不成立时返回的是 `FALSE`，单元格里会显示“FALSE”这几个字母。想让不成立时看上去是空的，要写一对紧挨着的英文双引号 `""`，它表示“空字符串”。这两个别混，一个显示 FALSE，一个是真空白。

## 逻辑判断这一格怎么写才不出错

比较运算符一共六个：`=` 等于、`>` 大于、`<` 小于、`>=` 大于等于、`<=` 小于等于、`<>` 不等于。写的时候注意这几点：

- **判断等于只写一个等号**。`=IF(A2=B2,...)` 对，写成 `A2==B2` Excel 不认。
- **`>=` 和 `>` 差一个边界，结果差一整档人**。题目写“60 分及以上”，就写 `B2>=60`；写“超过 60 分”，才写 `B2>60`。这是分段判断丢分最集中的地方。
- **文本比较要加双引号**，而且必须是**英文半角**的 `"`。中文输入法状态下的“双引号”是全角字符，Excel 不认它，写进公式里通常会直接提示公式有问题。
- **不要连写不等式**。`=IF(60<B2<90,...)` 是错的：Excel 会先把 `60<B2` 算成一个 TRUE 或 FALSE，再拿这个结果去和 90 比，结果永远是 TRUE，判断等于没用。

## 嵌套 IF：把“不成立”的那一格换成另一个 IF

要分的档超过两段，就得在第三个空里再放一个 `IF`，这叫**嵌套**。成绩分四档：

```
=IF(B2>=90,"优秀",IF(B2>=80,"良好",IF(B2>=60,"及格","不及格")))
```

读它的方式是从外往里走：

1. 先问 `B2>=90`。成立 → 返回“优秀”，结束。
2. 不成立 → 说明已经排除了 90 分以上的人，只剩 90 分以下的，再问 `B2>=80`。
3. 再不成立 → 说明连 80 都不到，再问 `B2>=60`。
4. 最后一个逗号后面直接写“不及格”，那是所有条件都不成立时的兜底结果。

这里有一条必须记住的机制：**判断是从外往里走的，只要某一层成立，函数立刻返回那一层的结果，里面剩下的条件根本不看。** 分 $n$ 个等级，就要写 $n-1$ 个 `IF`；外层 `IF` 的第三个空里，装的是下一个 `IF`。

## 顺序写反了会怎样

把上面的公式改成从小到大问：

```
=IF(B2>=60,"及格",IF(B2>=80,"良好",IF(B2>=90,"优秀","")))
```

拿 85 分试一下：第一层 `85>=60` 成立，函数立刻返回“及格”，后面两层**一次都不会执行**。整列填下来只会出现“及格”和“不及格”两种结果，“良好”和“优秀”永远轮不到——哪怕某人考了 100 分，也是“及格”。

微软文档里给了同性质的销售提成例子：档位从低往高写，12500 的销售额被“大于 5000”这一条先拦住，返回 10% 就停住了，正确的档位根本没机会执行 [2]。

## “从小到大”到底指什么

这里最容易记混：有老师说要从大到小，有的例题又像是从小到大。其实两种说法是一件事的两面，取决于你用哪种符号。

**写法一，用 `>=`，从高往低问：**

```
=IF(B2>=90,"优秀",IF(B2>=80,"良好",IF(B2>=60,"及格","不及格")))
```

**写法二，用 `<`，从低往高问：**

```
=IF(B2<60,"不及格",IF(B2<80,"及格",IF(B2<90,"良好","优秀")))
```

两条都正确，结果一模一样。所以“从小到大”这个说法，指的其实是写法二里**门槛值从 60 排到 90** 这件事；换成 `>=` 写法，门槛值就是倒着排的。

真正通用的规则只有一条：

> 每一层问的那个条件，必须是“当前还没有被排除掉的那段区间”里最靠边的那一端。

- 用 `>=` 问，就是从**最高档往下推**：先问 `>=90`，剩下的是 90 分以下的人，再问 `>=80`……
- 用 `<` 问，就是从**最低档往上推**：先问 `<60`，剩下的是 60 分以上的人，再问 `<80`……

把 `>=60` 放在第一层，问题不在于数字小，而在于 `>=60` 是这几档里**最宽、最容易成立**的那个条件，它会把所有人先拦住，方向就走反了。同理，`<90` 要是放在第一层，也会把 60 分以下的人先归成“良好”。

考场上的稳妥做法：先按 `>=` 从高到低写一遍，然后拿几个贴着门槛的分数在心里过一遍——85、90、59、60，看它们分别落进哪一层。

## 数字被存成文本，判断会整列出错

这是最隐蔽的一个坑。Excel 比较两个值时，先看类型，再比大小；类型的先后顺序是 **数字 < 文本 < 逻辑值（FALSE < TRUE）** [3][4]。换句话说，**只要有一边是文本，它就比任何数字都大**。`="5">60` 的结果是 TRUE [3]。

于是麻烦来了：成绩列如果是从别处导入的，或者单元格被提前设成了文本格式，A2 里看着是 5，实际是文本 `"5"`，那么 `=IF(A2>=60,"及格","不及格")` 会把整列人都判成“及格”，5 分的也及格。

认出它有三个办法：数字默认靠右对齐、文本默认靠左对齐；单元格左上角有绿色小三角（Excel 在提醒“这看着像数字，其实是文本”）；用 `=ISTEXT(A2)`，返回 TRUE 就是文本。

改回来：选中整列 → 数据 → 分列 → 什么都不动，一路点到“完成”，Excel 会按当前内容重新识别类型；或者另起一列用 `=VALUE(A2)` 把它转成真数字。类型改对之后，公式不用动，结果就正常了。

## 动手前的检查清单

- 三个空都填对了吗？第三空是 `""`（空白）还是干脆省略了（会显示 FALSE）？
- 双引号是英文半角吗？
- 写的是 `>=` 还是 `>`？题目原话是“及以上”还是“超过”？
- 每一层问的条件，是最严、最窄的那一档开始，逐层往外放宽吗？拿 89、90、59、60 试一遍。
- 公式里的分数线、税率这类固定格子，`$` 加了吗？
- 新版 Excel 有 `IFS` 函数，能把嵌套 `IF` 写平：`=IFS(B2>=90,"优秀",B2>=80,"良好",B2>=60,"及格",TRUE,"不及格")` [5]。但它只存在于 Office 2019 和 Microsoft 365 里，一次性买断的 Office 2016 根本没这个函数，写进去只会得到 `#NAME?` [6]。考试环境版本不确定，嵌套 `IF` 才是最稳的写法——先把上面这些写对。

## 术语表

- IF 函数：一个做二选一的函数，先算出一个 TRUE/FALSE，再根据结果从两个候选值里挑一个返回。
- 逻辑判断（logical_test）：IF 的第一个参数，必须是一个能算出 TRUE 或 FALSE 的表达式，而不是一句问话。
- 嵌套 IF：把 IF 的“不成立时返回什么”那一格换成另一个 IF，用来处理三段以上的分段判断。
- 判断顺序：嵌套 IF 从外往内逐个判断、遇到第一个 TRUE 就停，所以每层条件必须落在当前剩余区间最靠边的一端。
- 文本型数字：看着是数字、实际按文本存储的内容；参与比较时被当作文本，因而大于任何数字。
- 类型优先级：Excel 比较两个值先比类型再比大小，顺序为数字 < 文本 < 逻辑值。
- IFS 函数：把多段判断写成一个函数的写法，只在 Office 2019 和 Microsoft 365 中提供。

## 来源

1. [Microsoft Support: IF function — IF 的语法、三个参数含义与基础示例](https://support.microsoft.com/en-us/excel/functions/if-function)
2. [Microsoft Support: IF 函数 — 嵌套公式和避免错误 — 嵌套 IF 的判断顺序陷阱与提成档位示例](https://support.microsoft.com/en-us/excel/if-function-nested-formulas-and-avoiding-pitfalls)
3. [Exceljet: Text is greater than number — 文本值被判定为大于任何数字的实测与说明](https://exceljet.net/formulas/text-is-greater-than-number)
4. [Stack Overflow: Using logical operators with Excel strings — 比较运算的类型优先级（数字 < 文本 < 逻辑值）](https://stackoverflow.com/questions/44130621/using-logical-operators-with-excel-strings)
5. [Microsoft Support: IFS function — IFS 的语法与可用版本](https://support.microsoft.com/en-us/excel/functions/ifs-function)
6. [Microsoft Support: Office 2016 应用缺少新功能 — 官方说明一次性买断版不含 IFS 等新函数](https://support.microsoft.com/en-us/office/new-features-in-office-2016-apps-are-missing-after-re-installing-office-0ec1fde5-2b70-493b-a0cc-c887a20a25bc)

---

原文：https://pangzhengboyin.com/articles/excel-if-nested-condition-order-00454f96

> **庞征博引** · 想学的，慢慢都会
>
> 庞征博引是把想学的东西写成连载的 AI 学习工具。说出想学什么，它会先了解你的基础，再把主题写成一篇篇 5–10 分钟能读完的文章；边读边问，接下来学什么跟着你走。这篇就是这样写出来的。
>
> 开始你自己的连载 → https://pangzhengboyin.com
