IF 和多条件判断:嵌套不晕车

IF 是什么:表格里的如果那么

IF函数三参数速记

IF 是把 Excel 从计算器变成助手的那个函数。它的作用是替你做判断:成绩大于等于 60 显示及格,否则显示补考;订单金额超过 1000 打九折;库存低于安全线提醒补货。凡是你说出 如果 这两个字的场合,就是 IF 的战场。学会 IF 之后,你做的表会第一次有了做判断的能力。

语法只有三个部分:条件、成立时给什么、不成立时给什么。对应成大白话就是:如果条件满足,给我 A;不然给我 B。举例:判断成绩是否及格,条件写分数大于等于 60,成立给 及格,不成立给 补考。三个部分缺一不可,但第三部分允许省略——省略时不成立就显示 FALSE,一般还是会写清楚。

新手的第一个坎是参数的逗号和引号。分隔三个部分的逗号必须是英文状态;要显示的文字必须裹在英文双引号里,少了引号 Excel 会以为那几个字是某个函数名,立刻报错。写公式时把输入法切到英文,是减少这类报错最直接的办法。第二个坎是比较符号:大于等于是连写的两个符号,不等于是小于大于连写,这些符号都得在英文状态下输入。

这两个函数还经常用在表头校验上。比如收上来的表要求 A 列必须填日期,在旁边加一列辅助判断:A 列是日期就显示正常,否则提醒检查。这样不用打开表一条条看,公式把规矩执行到每一行。日常表格里所有 你应该怎样 的要求,都能翻译成这类自动检查公式。

IF 的两个分支还可以再放 IF,这叫嵌套,是下一节的主题。在此之前先记住一个朴素的工作原则:能不算就不算。写 IF 之前先确认数据本身干净——拿空白单元格和文本去比较,返回的结果往往出乎意料,比如空单元格在数值比较里被当作 0,空文本在等于比较里又不等于 0。判断对从录对数据开始,数据验证是配套装备,把状态、部门这些固定字段做成下拉,判断公式就永远不会遇到自由发挥的写法。

嵌套判断:层层剥洋葱不绕晕

成绩表是嵌套 IF 的经典教材:60 以下不及格、60 到 79 及格、80 到 89 良好、90 以上优秀。公式写法是外面一个 IF,不成立的部分再放一个 IF,像剥洋葱一样层层往里。读法是从外往里:先问是不是 90 以上,是就给优秀退出;不是,再问是不是 80 以上……一层层问下去,直到某一层命中。

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

嵌套的执行顺序是从外到内,先命中先退出。写的时候有个位置原则:把最严格的条件(或者说最大、最极端的区间端点)放最外层。上面的例子如果反过来先问是不是 60 以上,78 分的在第一步就命中及格退出了,永远不会得到良好,因为 78 同时满足两个条件,先问哪个就先按哪个算。这是嵌套 IF 写错的头号原因,记住 边界从大到小 或 从小到大 只能选一个方向贯彻到底。

成绩 第一层 90 以上 第二层 80 以上 第三层 60 以上 结果
95 命中 不再判断 不再判断 优秀
85 不命中 命中 不再判断 良好
72 不命中 不命中 命中 及格
58 不命中 不命中 不命中 不及格

嵌套层数一多,括号就乱。三个技巧治这个乱:一是写完按回车前数一下左右括号数量是否相等,公式编辑栏会用颜色提示配对;二是善用编辑栏,把光标点在不同括号上,配对的括号会加粗显示;三是直接在公式里换行,编辑栏里按 Alt 加回车可以让公式分段显示,每一层 IF 单独占一段,结构一目了然,复制到别的格子也不会丢格式。

新版软件给了偷懒选项:IFS 函数。条件和结果成对出现,不用套括号,最后加一个兜底参数处理所有条件都不满足的情况。Excel 2019 及以上和 WPS 近年版本都支持。如果没有兜底,所有条件都不成立时会返回错误值,所以习惯上把最后一个条件写成 TRUE,相当于否则。如果所在版本不支持 IFS,老老实实写嵌套 IF,通用性最强,发给任何人都能用。

嵌套层数理论上能写很多层,但实际工作经验是超过四层就该重新设计了,要么拆成多列分步判断,要么换成查找方案:建一张分数段对照表,用 VLOOKUP 的模糊匹配查对应等级,公式短、好维护、改规则只改表格不改公式,是处理分段问题的更优解。这一点等读完查找篇你会更有体会,模糊匹配那节专门讲了这套思路。

条件组合:把多个条件串起来

多条件组合三个函数

单条件 IF 好写,现实往往是好几个条件一起上:销售额超过 10 万且回款率超过九成才算达标;旷工超过 3 次或迟到超过 10 次直接扣绩效。这时候请出三个逻辑函数当帮手。它们本身不返回文字,只返回 TRUE 或 FALSE,嵌进 IF 里当条件。

AND 是 且:括号里所有条件都成立才真。两个条件卡住才算达标,少一个都不行。OR 是 或:任何一个成立就真,旷工和迟到满足其一就触发警告。NOT 是 非:把结果反过来,用得少,偶尔用于排除某一种情况,比如判断某格不等于某值时直接写不等号更直观。

函数 结果为真的条件 典型配合
AND 全部条件成立 双科都及格才算通过
OR 任一条件成立 旷工或超假触发警告
NOT 条件不成立 排除某一种状态

一个常见翻车点:文本比较默认不区分大小写,单元格写 YES、yes、Yes 在判断里都算相等。这个行为通常正好是想要的,毕竟填表人大小写习惯不一。真正要精确区分大小写的场合用 EXACT 函数做严格比较,密码字段、国际编号这类必须精确的地方才用得着。

条件里比较日期也是常见操作:判断某日期是否早于今天,直接和今天的日期函数比较即可,日期本身就是数字,比较运算天然成立。算 30 天内到期的合同、近一周新增的客户、超过三个月没有回款的订单,都是这个模式的变种,更多日期函数见日期和时间。

AND 和 OR 能互相转换,但读起来感觉完全不同。同一个规则:销售额超过 10 万且回款超过九成才算达标;换成 或 的说法就是 回款不超过九成或者销售额不超过 10 万,则不达标。哪个好读用哪个,推荐正面表述的 AND 版本,因为不达标 这个否定结论容易让人愣一下。条件个数超过四五个的时候,无论 AND 还是 OR 都比三层嵌套 IF 清晰,值得优先。再补充一条经验:AND 和 OR 最多支持 255 个条件,但超过五六个就该考虑是不是字段该拆分或者用查找方案了,可读性比炫技重要。

IF 的花式用法:分支里不止能放文字

IF 最常见的样子是给及格、补考两个字,其实两个分支里能放的东西多得很。放算式:金额超过 1000 就乘 0.9,否则原样,直接给出打折后的金额,不用再开一列。放其它函数:及格了才算三科总分,否则直接显示补考两字。放空字符串:源数据没填就显示空白,不要去查,免得满表错误值——这是做模板的标准套路。

=IF(B2>=90,"优秀","其它")
=IF(B2>1000,B2*0.9,B2)
=IF(A2="","",VLOOKUP(A2,表!A:C,3,0))

配合错误判断是高级一点的玩法。做一张对外模板,没填数据的行不应该显示错误值:查不到就显示空白,世界清静。IFERROR 是专门为此生的简化版:第一个参数正常就返回它,错误就返回第二个参数。IFNA 是更精准的版本,只处理找不到这一种错误,不影响其它真正的计算错误暴露出来。选哪个取决于你想把问题藏起来还是只藏某一种。打个比方:IFERROR 是物业统一拦截所有投诉,IFNA 是只拦截快递丢失这一类。

这两个兜底函数还能反过来用:故意让公式出错时触发某段逻辑。比如统计某客户是否有逾期,用 COUNTIFS 数一下逾期单数,为零时说明没逾期,配合判断输出不同文案。错误值也是信息,读得懂错误值的人,写公式会比别人多一条路。

分支里放什么 用途
文字 状态标签、结论
数字或算式 条件计算、折扣
空字符串 模板留白、防错误值
另一个函数 类型分支、联动计算
IFERROR 兜底 错误变空白或提示

条件格式也常和 IF 思路在一起,虽然写法不同。在条件格式里直接写规则公式来自定义高亮,逻辑和 IF 相同:公式成立就变色。判断够熟练了,把 IF 的脑子搬到条件格式上,表格就会自己开口说话:逾期的行变红、超预算的格子变黄,全都不用人工去刷颜色。

给 IF 运用排个经验顺序:先确认字段下拉化(数据干净),再写单条件 IF,接着按业务规则组合 AND 或 OR,需要分段时上嵌套或 IFS,最后用 IFERROR 兜住错误提示。这五步是从新手到熟手的一条完整升级路径,每一步都对应着一类真实业务表格。

动笔之前先画决策表,是避免嵌套晕车的好习惯。拿张纸把业务规则列成三列:条件怎么写、成立给什么、不成立给什么。比如报销审批:金额 5000 以下部门经理审、5000 到 20000 财务审、20000 以上老板审。写在纸上一看,边界自然有序,翻译成嵌套 IF 时从外到内照着抄就行,不用在脑子里同时维护多个分支。表格先于公式,是这个阶段最该养成的肌肉记忆。决策表还有个额外好处:评审规则的时候拿给业务方看,他们对着一列条件一条条确认,比看你那串天书一样的公式容易沟通得多,改规则也只需改纸上再同步到公式。

相关篇章

判断需要数据干净利落,公司名、部门名这些字段的清洗见文本函数。判断之后常常要按结果找数据,VLOOKUP 和 MATCH接着讲。判断的条件里常含日期和数值边界,日期和时间能帮你少踩边界相关的坑。

常见问题

嵌套 IF 写到一半括号对不上怎么办?

写公式的时候不要一口气敲完,用左右括号数量配平的笨办法:在公式里每输入一个左括号,就预备一个右括号。更实用的办法是写完一段用编辑栏点一下括号,配对的那个会加粗。如果公式已经报错,把公式复制到记事本里分行排开,每层 IF 单独一行,比挤在单元格里有助于发现错位。养成在公式里用 Alt 加回车分段的习惯,长公式立刻好读十倍。

IF 第三部分(否则)不写会怎样?

不写也能正常运行,条件不成立时显示 FALSE(个别版本显示 0)。模板里看起来很怪,所以补上:哪怕写一个空字符串也好。另外提醒:逗号还是要保留位置,少了逗号会直接报错,而不是默默给你兜底。

条件里比较文本,为什么 YES 和 yes 算相等?

Excel 的文本比较默认不区分大小写。这个设计对大部分业务场景是方便的(状态名手写大小写不一),需要区分时用 EXACT 函数做严格比较。注意中文不存在大小写问题,受影响的是英文编号、密码等字段。另外提醒:比较时如果一边是文本一边是数字,结果常常出乎意料,尽量保证两边类型一致。

IFS 提示找不到这个名字是怎么回事?

说明当前软件版本不支持 IFS,它需要 Excel 2019 或更高版本,WPS 较新版本也支持。旧版本里老老实实写嵌套 IF。另外函数名拼写错误也会报同样的错,少个字母或多了空格都算拼错。想知道自己的版本支不支持,最快的办法是随便找个格子输入函数名按回车试一下。

IF 的三个部分都写了,为什么还是报错?

九成是符号问题:逗号是中文逗号、引号是中文引号、或者文字两边忘了加引号。Excel 公式的符号必须全部是英文半角,输入法在写公式期间一律切英文。剩下的一成是括号不配对,数一下左右括号数量即可定位。如果公式很长,把每层 IF 用 Alt 加回车分行,报错位置立刻一目了然。

IF 结果显示 TRUE 或 FALSE 而不是我想要的文字?

说明条件或分支里漏写了参数。检查两个分支是否都填了内容,尤其忘了写第三部分时条件不成立会显示 FALSE。另一种情况是分支里的引号用了中文输入法打出来的,Excel 不认这种引号,把整段当成函数名处理掉了。

同一个判断要在很多行重复用,有没有省事的写法?

先把公式写对一行,然后双击填充柄往下刷,判断逻辑跟着相对引用自动套用到每一行。如果判断规则里有固定阈值,把它单独写在某个格子里并用绝对引用,以后改阈值只需要改一个格子,全表更新。再进一步,把分段阈值整理成一张对照表,用查找函数代替嵌套 IF,维护起来最省事。

为什么我的 IF 嵌套超过四层就乱套?

层数一多,括号配对、边界顺序、大小的方向同时占用脑子,错一处全盘皆错。这时候别硬嵌,换两种方案之一:一是拆列,先用一列做第一步判断,第二列引用第一列的结果再判断,温水煮青蛙;二是改用查找方案,把分段规则做成对照表,模糊匹配的写法比四层嵌套短一半也好读。工程上后者更推荐,规则改了只动表格不动公式。