IF 怎么用?从"补货提醒"到多级判断,以及嵌套太深的解法

2026-10-21 5 次浏览 Excel 函数
IF 是最简单也最容易被写乱的函数。这篇讲清基本写法、多条件、嵌套的正确顺序,以及嵌套超过三层时该换成什么。
IF(判断条件, 成立时显示什么, 不成立时显示什么)
用途根据一个条件是否成立,返回两种不同的结果。

IF 是所有函数的"地基"。学会了它,你才能把别的函数串起来干活。

但它也是被写乱最多的一个。我见过有人写了七层嵌套,自己第二天都看不懂。

关键IF 最常见的搭档是条件统计:COUNTIF 数个数、SUMIF 求和,三者配合能覆盖日常八成的判断类活。

这篇的目标:让你既能写出正确的 IF,也知道什么时候不该用它。

先看表:库存表

编号品名库存提示
A001茄克20
A002茄克86
A003风衣70
A004茄克64
A005茄克29

需求:库存低于 30 的,提示"补货";否则提示"充足"。

最基本的写法

=IF(C2<30, "补货", "充足")

三个参数,读作:

  • `C2<30` —— 判断条件(库存小于 30 吗?)
  • `"补货"` —— 成立时显示这个
  • `"充足"` —— 不成立时显示这个
关键记住顺序:条件、成立、不成立。很多人会写成"成立、条件、不成立",结果不报错但全是反的。

三种常见变体

只关心"成立"的情况

第三个参数可以不写,或者写成 `""`:

=IF(C2<30, "要补货", "")

不成立时显示空白,表看起来更干净。

结果是数字

不用加引号:

=IF(C2<30, 0, C2)

条件是文字比较

=IF(B2="茄克", "外套类", "其他")

文字条件要加引号,而且等号只有一个,不是两个。

易错编程语言里判断相等用 `==`,Excel 不是。写 `==` 会直接报错。

多条件:AND 和 OR

两个条件都要满足(AND)

"库存低于 30 并且是茄克":

=IF(AND(C2<30, B2="茄克"), "茄克要补货", "")

`AND(条件1, 条件2, ...)` —— 全部成立才返回 TRUE。

满足任意一个就行(OR)

"库存低于 30 或者是风衣":

=IF(OR(C2<30, B2="风衣"), "注意", "")

`OR(条件1, 条件2, ...)` —— 有一个成立就返回 TRUE。

关键还有个乘法写法:`(C2<30)*(B2="茄克")` 等于 AND(两个 1 相乘才是 1),`(C2<30)+(B2="茄克")` 等于 OR。这个在数组公式里很好用,但日常可读性不如 AND/OR,建议先用标准写法。

嵌套:分级判断

需求变了:库存 < 30 提示"紧急补货",30–60 提示"注意",> 60 提示"充足"。

这就得用嵌套——把 IF 当成第三个参数再塞一个 IF 进去。

=IF(C2<30, "紧急补货", IF(C2<=60, "注意", "充足"))

拆开看:

  1. 先判断 `C2<30`。成立 → "紧急补货"
  2. 不成立 → 进入第二个 IF 判断 `C2<=60`。成立 → "注意"
  3. 还不成立 → "充足"
关键关键理解:第二个 IF 只在"第一个条件不成立"时才执行。所以走到 `C2<=60` 这一步时,已经隐含了"`C2` 不小于 30",也就是 `C2>=30`。所以第二个条件只写 `<=60` 就够,不用写 `AND(C2>=30, C2<=60)`。

嵌套的顺序必须从大到小(或从小到大),不能乱

这是嵌套最容易错的地方。三个区间的边界必须顺着排:

  • 对:`<30` → `<=60` → 其他
  • 对:`<=60` → `<=30` → 其他(从大到小也行)
  • 错:`<30` → `<=100` → 其他(中间漏了一段,60–100 判断不到)

结束括号的数量

嵌套两层,结尾有两个 `)`。三层就有三个。

关键技巧:在编辑栏里输入时,Excel 会给每对括号上不同的颜色。对着颜色数就不会漏。

嵌套太深怎么办:三种替代方案

我个人的经验线是:超过三层就不要再用 IF 了。 三层以上的 IF 有三个问题:容易漏括号、顺序一错全错、别人(包括三个月后的你)看不懂。

方案一:IFS(Excel 2019 及以上 / 365)

=IFS(C2<30, "紧急补货", C2<=60, "注意", C2<=100, "关注", TRUE, "充足")

写法是"条件1, 结果1, 条件2, 结果2……",从上往下第一个成立的生效。

最后的 `TRUE, "充足"` 相当于"其他情况",必须有,否则没匹配上会返回 `#N/A`。

关键如果你用的 Excel 是 2016 或更早,没有 IFS。可以用 `IF` 嵌套,或者用下面的方案三。

方案二:VLOOKUP 查区间表(最推荐,任何版本都能用)

在旁边的空区域建一张"对照表":

下限等级
0紧急补货
30注意
60充足

然后用 VLOOKUP 的近似匹配(第四个参数填 1):

=VLOOKUP(C2, $F$2:$G$4, 2, 1)

它会找"不超过 C2 的最大下限"。C2=20,落在 0 那一档,返回"紧急补货";C2=45,落在 30 那一档,返回"注意"。

关键这就是 VLOOKUP 第四个参数填 1 的唯一正当用途:查区间。前提是这张对照表必须按第一列升序排好,否则结果会乱。

好处是:以后要改档位,只改表,不用改公式。这是我做报表最常用的套路。

方案三:CHOOSE + MATCH

=CHOOSE(MATCH(C2,{0,30,60},1),"紧急补货","注意","充足")

`MATCH` 找出 C2 落在第几档,`CHOOSE` 按序号取结果。不用建辅助表,但可读性不如方案二。

常见错误

现象原因解决
结果全是反的参数顺序写反了记住:条件、成立、不成立
报错 `#NAME?`用了 `==`只写一个 `=`
括号不够嵌套层数和括号数不一致看编辑栏的彩色括号
中间有段落漏判边界顺序乱了从大到小或从小到大顺排
文字判断查不到文本里有空格用 `TRIM()` 包一层

一句话总结

IF 就是"如果……就……否则……"。三层以内用嵌套,三层以上改查表(VLOOKUP + 对照表),能省掉以后所有的维护麻烦。
关键下一步建议:把 IF 和 COUNTIF 组合起来用(判断"是否已录入"),或者和 ISBLANK 组合(判断"是否填写完整")。函数的价值在组合,不在单个。

评论 0

还没有评论,来说第一句吧。

发表评论

提交后需审核通过才会显示。

对作品感兴趣?

欢迎交流使用体验、功能建议或技术问题,看到消息我会尽快回复。