逻辑函数:IF、IFS、AND/OR 与嵌套的替代写法
判断是公式的「岔路口」:往左还是往右,取决于条件成不成立。逻辑函数就是 Excel 的岔路口看守。这一篇把 IF 家族讲透,并给出三层嵌套以后的替代方案——那是新手和老手最明显的分水岭。
IF:一个条件两个出口
语法:
=IF(logical_test, value_if_true, value_if_false)
logical_test 是返回 TRUE/FALSE 的表达式,后面两个参数分别是成立和不成立时的返回值。例:根据 B 列的考核分数判断是否合格:
=IF(B2>=60,"合格","不合格")
两个细节:第二、三个参数都可以省略(省略第三个参数,条件不成立时返回 FALSE),也可以嵌套函数;文本要加引号,引用单元格不要引号。
返回值的选择有个讲究:尽量返回可计算的值。返回空文本(一对英文引号包裹的空白)的单元格,后续 COUNTA 会把它算成非空,COUNT 则不数——统计口径因此完全不同。空文本和真空单元格不是一回事,这是模板隐性 bug 的高发区。
AND / OR / NOT:组合条件
AND(条件1,条件2,...):全部成立才返回 TRUE。OR(条件1,条件2,...):任一成立即 TRUE。NOT(条件):取反。
判断「笔试和面试都及格」:
=IF(AND(B2>=60,C2>=60),"录用","不录用")
注意比较运算符不能连写,60<=B2<=100 这种写法在 Excel 里是错的,要写成 AND(B2>=60,B2<=100)。AND/OR 最多容纳 255 个参数,但超过四五个时就该想想是不是该拆辅助列了——没人能一眼读懂七个条件的 AND。
三个函数还能嵌着用,比如「迟到超过 3 次且未请假,或者早退超过 2 次」:
=OR(AND(B2>3,请假天数=0),C2>2)
写复合条件的顺序建议:把最外层的判断词(是 OR 还是 AND)先定下来,再往里填条件,从左到右读起来正好是一句中国话。
IFS:多重分支的现代写法
需要多个条件时,新手本能地套 IF:
=IF(B2>=90,"优秀",IF(B2>=80,"良好",IF(B2>=70,"中等","待改进")))
三层还能忍,五层以上自己都不想看。Excel 2019 及以上版本(含 Microsoft 365)提供了 IFS 函数,官方文档描述它可以替代多个嵌套 IF:
=IFS(B2>=90,"优秀",B2>=80,"良好",B2>=70,"中等",TRUE,"待改进")
参数表:
| 参数 | 必需性 | 说明 |
|---|---|---|
| logical_test1 | 必需 | 第一个条件 |
| value_if_true1 | 必需 | 条件成立时的返回值 |
| logical_test2…127 | 可选 | 后续条件,最多共 127 组 |
| value_if_trueN | 可选 | 对应的返回值 |
版本差异要注意:IFS 在 Excel 2019 和 Microsoft 365 中可用,Excel 2016 及更早版本没有这个函数。公司还在用 2016 的,老老实实写嵌套 IF,或者用下面的查找法。
IFS 的行为细节(依据 Microsoft 官方文档):条件按顺序判断,返回第一个成立条件对应的值;所有条件都不成立时返回 #N/A;条件表达式的结果不是 TRUE/FALSE(比如引用了文本)时返回 #VALUE!。所以末尾用 TRUE 加默认值兜底是个好习惯:
=IFS(B2>=90,"优秀",B2>=80,"良好",TRUE,"待改进")
分支方案怎么选
| 方案 | 适用场景 | 版本要求 | 可维护性 |
|---|---|---|---|
| 嵌套 IF | 二三分支、临时公式 | 全版本 | 差,层数一多就晕 |
| IFS | 三五个互斥条件 | 2019/365 | 好,条件一目了然 |
| 查找法(参数表) | 连续区间、档位会调整 | 全版本 | 最好,改表不改公式 |
| 布尔乘法 | 多个独立条件叠加计算 | 全版本 | 中,思路陡峭 |
选型原则一句话:互斥分支用 IFS,连续区间用查找法,独立叠加用布尔乘法。三分支以内图省事可以直接 IF,再多就该考虑搬家到参数表了。
嵌套的替代写法一:查找法
连续区间判断(分数段、提成档)本质是「查找最接近的档位」,可以用查找函数完成,一维映射干净利落。准备一张参数表:
| 下限 | 等级 |
|---|---|
| 0 | 待改进 |
| 70 | 中等 |
| 80 | 良好 |
| 90 | 优秀 |
然后在结果列写(近似匹配,第二参数省略或写 TRUE):
=VLOOKUP(B2,参数表!$A$2:$B$5,2,TRUE)
前提:参数表的「下限」列必须升序排列。以后调档位只改参数表,公式不动——这是把「判断逻辑」从公式里搬到数据里的典型思路。低版本兼容性最好的写法,具体见查找函数一篇。
顺带一提:查找法还有个隐藏优势。年底评优标准从 70 分调到 75 分,嵌套 IF 要逐层改公式、改完还得全文检查一遍;查找法只改参数表一个数字,所有结果自动更新。维护成本差一个数量级。
嵌套的替代写法二:布尔乘法
如果分支结果只是「算这个数或算那个数」,不用 IF 也行,用 TRUE/FALSE 参与运算的特性(TRUE 当 1,FALSE 当 0):
=基本工资*(1+(B2="经理")*0.2+(B2="主管")*0.1)
经理加 20%,主管加 10%,其他人不动。多个条件独立叠加时,这种写法比嵌套 IF 短得多。但条件互斥(只能选一个)时不要用,会重复计算。
实际场景:考勤状态判断
假设 B 列是迟到分钟数,C 列是早退分钟数,要输出考勤状态:
=IFS(AND(B2>30,C2>30),"严重异常",OR(B2>30,C2>30),"异常",TRUE,"正常")
用 IFS 一行写完,逻辑清晰:先判最严重的情况,再判一般异常,最后兜底。如果公司还在用 Excel 2016,对应写成:
=IF(AND(B2>30,C2>30),"严重异常",IF(OR(B2>30,C2>30),"异常","正常"))
功能等价,可读性差一截。
调试长判断公式
判断公式写错最难查,因为不报错、只给错结果。两个排查动作:
- 把条件单独拎出来。在旁边加辅助列,只放
AND(B2>30,C2>30),显示 TRUE/FALSE,哪一行判断反了一目了然。 -
自造边界数据。故意造一条「迟到 31 分钟、早退 0 分钟」的记录,看输出是「异常」还是「严重异常」——边界值是分支逻辑最容易错的地方。
-
画一张判断表。复杂分支动笔前先画「条件→结果」对照表:每行一个条件组合,旁边写期望输出。写公式时照着表逐条核对,比盯着公式空想效率高得多,返工率也明显低。这张表还能直接充当测试用例,公式改一次,照着表测一遍。
新手常见误区
- 把文本条件忘了引号。下面这条会报 #NAME?,正确写法是把「是」用英文引号括起来:
错误:=IF(B2=是,"Y","N")
正确:=IF(B2="是","Y","N")
- IF 的第三参数省略了却没意识到。只写 TRUE 分支的 IF,条件不成立时会返回 FALSE,后续公式遇到 FALSE 可能算出错,养成写全三个参数的习惯。
- 条件顺序写反。IFS 和嵌套 IF 都按顺序短路判断,把宽条件写在前面,后面的严格条件永远轮不到。
- AND/OR 里混用逻辑层。条件层数太深的 AND 嵌套不是不行,是太难读,拆成辅助列。
逻辑函数是公式世界的「if 语句」,写熟之后建议读一读 程序员简历与谈薪指南——不是让你转行,而是理解「逻辑能力在任何岗位都是硬通货」这件事,面试谈薪时同样用得上。
小结
IF 管二选一,IFS 管多选一(注意版本),AND/OR 管条件组合,连续区间用查找法替代嵌套。判断逻辑尽量往参数表里搬,公式只做执行——这是模板能长期复用的关键。写完任何判断公式,都记得拿边界数据跑一遍:分支逻辑的错不会报错,只会让你在交表后被领导问得哑口无言。
