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