# IF：让单元格自己判断——多档条件怎么写不乱，判断出错时怎么兜底

条件成立返回什么、不成立返回什么，嵌套 IF 为什么顺序不能乱，以及空单元格和错误值怎么兜住

> Excel 函数 · 表格计算 · 数据整理 · 约 6 分钟 · 09 月 26 日

## 本篇要点

1. IF 的结构是 IF(条件, 成立时返回什么, 不成立时返回什么)，条件必须是一段能算出 TRUE 或 FALSE 的表达式，IF 只负责根据这个真假挑一个结果。
2. 第三个参数完全不写时，条件不成立会显示逻辑值 FALSE；写了逗号但内容留空时，会显示 0。整列零星冒出 FALSE 或 0，通常就是这里没写全。
3. 想让结果显示为空白，要主动写空文本 ""，而不是省略参数。
4. 多档条件的做法是把第三个参数换成下一个 IF：每往下一层，都隐含排除了上面的档位，所以每层只需要写一个边界。
5. IF 遇到第一个成立的条件就停止，所以条件必须从一端顺序排到另一端；顺序写反不会报错，只在部分行悄悄给出错误结果。
6. 用 IFS 写成对的条件和结果可以免去层层嵌套，但所有条件都不成立又没有兜底时它返回 #N/A，所以要保留最后那对永远成立的 TRUE 兜底；IFS 需要 Excel 2019 及以上或 Microsoft 365。
7. 空白单元格参与数值比较时被当成 0，未填数据的行会被误判成“不及格”，所以在进入分档前先判断 B2="" 可以挡掉这种情况。
8. IFERROR(公式, 出错时返回什么) 用来替换除零、查不到等预期内的错误，但它同时会吞掉 #NAME?、#REF! 这类说明公式坏了的错误，不该一律遮住。
9. 写完嵌套判断后要挑边界值上下两行各试一次，第一行正确不代表整列正确。

---

上一篇我们让公式里的引用学会“该跟着走时跟着走”，这篇让它学会“看情况给答案”。

## IF 只做一件事：算一个真假，再挑一个结果

看一个最常用的写法：

`=IF(B2>=60,"及格","不及格")`

`B2>=60` 是一段能算出真或假的表达式，结果只有 `TRUE` 或 `FALSE` 两种。IF 拿到这个结果后负责挑：真，返回第二个参数；假，返回第三个参数 [1]。结构就是：

`IF(条件, 成立时返回什么, 不成立时返回什么)`

第二个参数必填，第三个可以省略。

两个容易踩的写作规则：

- 想让结果是一段文字，要用双引号包起来：`"及格"`。不包的话 Excel 会把它当成一个名字去找，找不到就报 `#NAME?`。
- 想让结果是数字或另一个单元格，就别加引号。`"100"` 是文本，`B2="100"` 对数字 100 永远不成立，于是整列都走“不成立”那一支——不报错，但结果一眼看去就是不对。

条件里的引用照样遵守上一篇的规则。往下拖时 `B2>=60` 变成 `B3>=60`，正是你要的；如果及格线写在别的固定格子里，就得像汇率那样写成 `B2>=$F$1`，把那一格钉死。

## 屏幕上出现 FALSE 或 0，多半是第三个参数没写全

省略第三个参数有两种写法，结果并不一样 [2]：

| 写法 | 条件不成立时显示 |
| --- | --- |
| `=IF(B2>=60,"及格")` | `FALSE` |
| `=IF(B2>=60,"及格",)` | `0` |

前一种是逗号干脆不写，Excel 就把逻辑值 FALSE 本身当结果扔出来；后一种是逗号写了、内容留空，Excel 把空参数当 0 [2]。两种都不是你想看到的，而且都不报错。

所以，整列里零星冒出 `FALSE` 或 `0`，第一件事就是去看公式尾部。

想要“不成立时什么都不显示”，正确写法是主动给一个空文本：`=IF(B2>=60,"及格","")`。两个连续的双引号表示空文本，单元格看起来是空的，但里面确实有一个公式。

## 多档条件：把“剩下的情况”再问一次

只分及格、不及格，IF 就够了。要是分数要分四档呢？

思路是把第三个参数换成下一个 IF：第一个条件不成立时，说明最高那一档已经被排除，于是接着问下一档。

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

读起来是这样：

- 先问：≥90 吗？成立就返回“优”，结束。
- 不成立，说明已经隐含“小于 90”，那就只问 `B2>=80`。你不必写成“≥80 且 <90”，因为上一层已经替你排除了 ≥90 的情况。每层只写一个边界，这就是嵌套 IF 能写得短的原因。
- 再问：≥60 吗？成立就“及格”。
- 都不成立，落到最里面的“不及格”。它不是又一个条件，而是最后剩下的那种可能。

括号怎么配平？数一数开了几个 IF，就在末尾补几个 `)`。上面开了三个 IF，末尾就是三个右括号。可以按 `IF(条件,结果,` 的节奏一路往前推，最后统一收尾；也可以每写完一层先补上右括号再回来填下一层，这样不容易漏。Excel 最多允许嵌套 64 层 [7]，日常分档远远用不到，所以真正要防的是括号和顺序写乱，不是层数。

## 顺序错了不报错，只是悄悄给出错的答案

IF 是**碰到第一个成立的条件就停下来**，后面的条件根本不会被看到。所以条件必须从一端排到另一端，中间不能来回横跳。

微软文档里举过这个坑：有个公式想按销售额分档给提成，但比较顺序被写成了从 5000 一路往上到 15000。一行销售额 12,500 的数据，在“大于 5000”这一档就成立了，公式返回 10% 就收工，后面几档压根没被问到 [3]。

这类错误特别难看穿：它只在部分行出错，也不报任何错。所以写完以后别只看第一行。**把每档边界值的上下各挑一行出来试**——比如准备好 90、89、80、79 四行，看它们各自落在哪一档。贴着边界的那一对最容易暴露顺序问题。

## 括号太多，可以换成 IFS

同样是分档，IFS 把“条件、结果”成对排开，不用一层层往里嵌 [4]：

`=IFS(B2>=90,"优",B2>=80,"良",B2>=60,"及格",TRUE,"不及格")`

读法是：从上往下找第一对成立的条件，返回它对应的结果，后面的不再看。末尾的 `TRUE` 永远成立，所以它就是兜底那一档。

两点提醒：如果所有条件都不成立、又没写兜底，IFS 会返回 `#N/A` [4]，所以最后那对 `TRUE, …` 不能省；IFS 需要 Excel 2019 及以上或 Microsoft 365 [4]，老版本继续用嵌套 IF，逻辑完全一样，只是括号多一些。

## 兜底一：还没填数据的行，别当成 0

判断最容易出的乌龙和空单元格有关。Excel 里，空白单元格参与数值比较时会被当成 0：它同时被认为等于空文本、也等于 0，但空文本并不等于 0 [5]。

后果很直接：明细表里还没填分数的行，`B2>=60` 实际算的是 `0>=60`，为假，被标成“不及格”。整列看着很正常，只是凭空多了几条假的不及格。

正确做法是在最前面先问一句有没有数据，再进入分档：

`=IF(B2="","",IF(B2>=60,"及格","不及格"))`

`B2=""` 问的就是“这一格是不是空的”。空就直接给空文本，后面的比较根本不会执行。

另外，“看着空”的格子不一定真空：里面可能是一个空格（`B2=""` 不成立），也可能是某个公式返回的空文本（`B2=""` 成立，但 `ISBLANK(B2)` 返回 FALSE）。日常检查用 `B2=""` 一般够用，因为这两种“没内容”它都能命中。

## 兜底二：公式根本算不出来时返回什么

有些错误不是判断结果不理想，而是公式压根算不出来，比如分母为 0 的 `#DIV/0!`、查不到内容的 `#N/A`。IFERROR 专门处理这种情况 [6]：

`=IFERROR(原来的公式, 出错时显示什么)`

它包住整段公式：公式正常就原样返回结果，出现错误就换成你指定的值。常见写法 `=IFERROR(A2/B2, "")`，除数还没填的行就不会满屏 `#DIV/0!`。要包在你希望保护的整段公式外面，而不是只包住其中一小块。

但 IFERROR 会把所有错误一起吞掉，包括本该让你看见的那些：函数名拼错的 `#NAME?`、引用的整列被删掉的 `#REF!`。这些错误的意思是“公式坏了”，改成空白等于把报警灯拆了。所以兜底的原则是：**只兜那种你预期会发生、而且换成默认值也不影响结论的错误**（比如本月还没数据导致除零）；公式结构性的错误，让它露出来。

## 写完检查三件事

1. 条件里的引用，往下拖之后是不是还盯着正确的格子；
2. 各档边界上下各挑一行试一下，特别是贴着边界的那一对；
3. 有没有处理“数据还没填”的情况，会不会把 `FALSE` 或 0 直接暴露给看表的人。

这三条过了，一个 IF 列就可以放心拖满整张表。

## 术语表

- 逻辑判断：一段能算出 TRUE 或 FALSE 的表达式，例如 B2>=60；IF 就是根据它的结果做选择。
- IF(条件, 成立时返回什么, 不成立时返回什么)：根据条件真假返回两种结果之一的函数，第三参数可省略，但省略后会露出 FALSE 或 0。
- 空文本 ""：两个连续双引号表示的空字符串，单元格里看着是空的，实际上有一个公式。
- 嵌套 IF：把 IF 写进上一个 IF 的“不成立”位置，用来处理两档以上的情况；每层只写一个边界，末尾的括号要一一配平。
- IFS：把“条件、结果”成对排开的多档判断函数，从上往下取第一个成立的条件，末尾常用 TRUE 兜底。
- IFERROR(公式, 出错时返回什么)：包住整段公式，公式出错时换成你指定的值，用来兜住预期内的错误。

## 来源

1. [Microsoft Support: IF function — 语法、三个参数的必填与可选、文字需加引号](https://support.microsoft.com/en-us/office/if-function-69aed7c9-4e8a-4755-a9bc-aa8bbff73be2)
2. [Microsoft Support: IF function（旧版页）— 省略第三个参数返回 FALSE，参数留空返回 0](https://support.microsoft.com/en-us/office/if-function-7025be14-5665-43d0-af20-8293d1fe9d3a)
3. [Microsoft Support: IF function – nested formulas and avoiding pitfalls — 嵌套 IF 示例与比较顺序写反的陷阱](https://support.microsoft.com/en-us/excel/if-function-nested-formulas-and-avoiding-pitfalls)
4. [Microsoft Support: IFS function — 用法、无成立条件时返回 #N/A、支持的版本](https://support.microsoft.com/en-us/excel/functions/ifs-function)
5. [ICAEW Excel Community: Why blank cells calculate as zero and does it matter? — 空白单元格在计算中按 0 或空文本处理](https://www.icaew.com/technical/technology/excel-community/excel-community-articles/2025/why-blank-cells-calculate-as-zero-and-does-it-matter)
6. [Microsoft Support: IFERROR function — 语法、可处理的错误类型与示例](https://support.microsoft.com/en-us/office/iferror-function-c526fd07-caeb-47b8-8bb6-63f3e417f611)
7. [Microsoft Support: Use nested functions in an Excel formula — 一个公式最多嵌套 64 层函数](https://support.microsoft.com/en-us/excel/use-nested-functions-in-an-excel-formula)

---

原文：https://pangzhengboyin.com/articles/excel-if-nested-conditions-and-error-fallback-5df3b1c3

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