按分数判断及格、按销售额算提成、按日期判断是否逾期、把错误值替换成空值。IF 是最基础的逻辑函数,但嵌套太多会难维护;能拆成辅助列或改用 IFS、XLOOKUP、SWITCH 时,优先选更易读的写法。
=IF(条件, 条件为真时的结果, 条件为假时的结果)
=IF(A2>=60,"及格","不及格")
=IF(B2="","未填",B2*1.13)
TRUE 或 FALSE;FALSE,不是空文本;"",不要写空格。=IF(A2>=90,"优秀",IF(A2>=80,"良好",IF(A2>=60,"及格","不及格")))
嵌套顺序要从严格到宽松,否则后面的条件永远轮不到。例如先判断 >=60 再判断 >=90,90 分也会先被“及格”截住。
Excel 最多允许 64 层嵌套,但实际超过 3–4 层就该考虑换写法。把判断依据做成一张对照表,用 XLOOKUP 近似匹配或 VLOOKUP 查表,通常比长嵌套更好维护。
=IFS(A2>=90,"优秀",A2>=80,"良好",A2>=60,"及格",TRUE,"不及格")
IFS 按顺序判断,返回第一个为真的结果。最后的 TRUE,"不及格" 是兜底;如果没有条件命中且没有兜底,返回 #N/A。IFS 在 Excel 2019/365 中可用,Excel 2016 及更早版本没有。
=SWITCH(A2,"A","华东","B","华南","C","华北","其他")
SWITCH 适合“一个值对应一个结果”的等值判断,不适合大于、小于这类范围判断。
| 函数 | 作用 | 示例 |
|---|---|---|
AND |
所有条件都为真 | =AND(A2>=60,B2>=60) |
OR |
任意一个条件为真 | =OR(A2="华东",A2="华南") |
NOT |
取反 | =NOT(ISBLANK(A2)) |
组合示例:
=IF(AND(A2>=60,B2>=60),"双科及格","有不及格")
=IF(OR(C2="逾期",D2<0),"需要处理","正常")
=IF(NOT(ISBLANK(E2)),"已填","未填")
AND/OR 会计算所有参数,没有短路求值。参数里如果有 1/0 这类会产生 #DIV/0! 的表达式,即使前面的条件已经能决定结果,后面的错误仍可能冒出来;必要时用嵌套 IF 先挡掉错误。
=IFERROR(VLOOKUP(A2,D:E,2,FALSE),"未找到")
=IFNA(VLOOKUP(A2,D:E,2,FALSE),"未找到")
IFERROR 会把 #N/A、#VALUE!、#DIV/0! 等所有错误都替换掉,适合最终报表;IFNA 只替换 #N/A,其他错误继续暴露,适合排查阶段;IFERROR 包住整个复杂公式来“让报表好看”,否则真正的类型错误、引用错误会被藏起来。| 需求 | 公式 |
|---|---|
| 空值显示为 0 | =IF(A2="",0,A2) |
| 除以 0 时返回空 | =IF(B2=0,"",A2/B2) |
| 判断是否逾期 | =IF(AND(B2<>"",B2<TODAY()),"逾期","正常") |
| 按区间算提成 | =IF(A2>=100000,A2*0.05,IF(A2>=50000,A2*0.03,A2*0.01)) |
| 多条件分类 | =IFS(AND(A2="华东",B2>10000),"重点",A2="华东","普通",TRUE,"其他") |
= 写成 ==:Excel 公式里判断相等只用 =,== 会报错。=IF(A2=华东,...) 会把华东当成未定义名称,返回 #NAME?。"60" 和 60 比较时可能得到意外结果;先用 VALUE 转换或统一格式。=IF(A2>=60,"及格") 在不及格时返回 FALSE,不是空白。IFS 没有兜底:所有条件都不满足时返回 #N/A;加 TRUE,"其他" 更稳。IFERROR 掩盖问题:把所有错误都变成空值后,源数据的问题更难发现;调试时先用 IFNA 或暂时去掉错误处理。IFNA合上页面,先回答,再展开对照。
=IF(A2>=60,"及格") 在 A2 为 50 时返回什么?IFERROR 和 IFNA 应该分别在什么阶段用?FALSE,因为省略了第三个参数;要返回空文本应写 ""。IFNA 只处理找不到的情况,保留其他错误;最终报表可以用 IFERROR 统一兜底。
小程序版
微信扫码,随时查命令