IF 是所有函数的"地基"。学会了它,你才能把别的函数串起来干活。
但它也是被写乱最多的一个。我见过有人写了七层嵌套,自己第二天都看不懂。
这篇的目标:让你既能写出正确的 IF,也知道什么时候不该用它。
先看表:库存表
| 编号 | 品名 | 库存 | 提示 |
|---|---|---|---|
| A001 | 茄克 | 20 | |
| A002 | 茄克 | 86 | |
| A003 | 风衣 | 70 | |
| A004 | 茄克 | 64 | |
| A005 | 茄克 | 29 |
需求:库存低于 30 的,提示"补货";否则提示"充足"。
最基本的写法
三个参数,读作:
- `C2<30` —— 判断条件(库存小于 30 吗?)
- `"补货"` —— 成立时显示这个
- `"充足"` —— 不成立时显示这个
三种常见变体
只关心"成立"的情况
第三个参数可以不写,或者写成 `""`:
不成立时显示空白,表看起来更干净。
结果是数字
不用加引号:
条件是文字比较
文字条件要加引号,而且等号只有一个,不是两个。
多条件:AND 和 OR
两个条件都要满足(AND)
"库存低于 30 并且是茄克":
`AND(条件1, 条件2, ...)` —— 全部成立才返回 TRUE。
满足任意一个就行(OR)
"库存低于 30 或者是风衣":
`OR(条件1, 条件2, ...)` —— 有一个成立就返回 TRUE。
嵌套:分级判断
需求变了:库存 < 30 提示"紧急补货",30–60 提示"注意",> 60 提示"充足"。
这就得用嵌套——把 IF 当成第三个参数再塞一个 IF 进去。
拆开看:
- 先判断 `C2<30`。成立 → "紧急补货"
- 不成立 → 进入第二个 IF 判断 `C2<=60`。成立 → "注意"
- 还不成立 → "充足"
嵌套的顺序必须从大到小(或从小到大),不能乱
这是嵌套最容易错的地方。三个区间的边界必须顺着排:
- 对:`<30` → `<=60` → 其他
- 对:`<=60` → `<=30` → 其他(从大到小也行)
- 错:`<30` → `<=100` → 其他(中间漏了一段,60–100 判断不到)
结束括号的数量
嵌套两层,结尾有两个 `)`。三层就有三个。
嵌套太深怎么办:三种替代方案
我个人的经验线是:超过三层就不要再用 IF 了。 三层以上的 IF 有三个问题:容易漏括号、顺序一错全错、别人(包括三个月后的你)看不懂。
方案一:IFS(Excel 2019 及以上 / 365)
写法是"条件1, 结果1, 条件2, 结果2……",从上往下第一个成立的生效。
最后的 `TRUE, "充足"` 相当于"其他情况",必须有,否则没匹配上会返回 `#N/A`。
方案二:VLOOKUP 查区间表(最推荐,任何版本都能用)
在旁边的空区域建一张"对照表":
| 下限 | 等级 |
|---|---|
| 0 | 紧急补货 |
| 30 | 注意 |
| 60 | 充足 |
然后用 VLOOKUP 的近似匹配(第四个参数填 1):
它会找"不超过 C2 的最大下限"。C2=20,落在 0 那一档,返回"紧急补货";C2=45,落在 30 那一档,返回"注意"。
好处是:以后要改档位,只改表,不用改公式。这是我做报表最常用的套路。
方案三:CHOOSE + MATCH
`MATCH` 找出 C2 落在第几档,`CHOOSE` 按序号取结果。不用建辅助表,但可读性不如方案二。
常见错误
| 现象 | 原因 | 解决 |
|---|---|---|
| 结果全是反的 | 参数顺序写反了 | 记住:条件、成立、不成立 |
| 报错 `#NAME?` | 用了 `==` | 只写一个 `=` |
| 括号不够 | 嵌套层数和括号数不一致 | 看编辑栏的彩色括号 |
| 中间有段落漏判 | 边界顺序乱了 | 从大到小或从小到大顺排 |
| 文字判断查不到 | 文本里有空格 | 用 `TRIM()` 包一层 |
一句话总结
IF 就是"如果……就……否则……"。三层以内用嵌套,三层以上改查表(VLOOKUP + 对照表),能省掉以后所有的维护麻烦。
评论 0