IF 函数 - 嵌套公式和避免错误
Applies ToMicrosoft 365 专属 Excel Microsoft 365 Mac 版专属 Excel Excel 网页版 Excel 2024 Excel 2024 for Mac Excel 2021 Excel 2021 for Mac Excel 2019 Excel 2019 for Mac Excel 2016 Excel Web App Excel for Windows Phone 10

IF 函数允许通过测试某个条件并返回 True 或 False 的结果,从而对某个值和预期值进行逻辑比较。

  • =IF(内容为 True,则执行某些操作,否则就执行其他操作)

因此 IF 语句可能有两个结果。 第一个结果是比较结果为 True,第二个结果是比较结果为 False。

IF 语句非常强大,其构成了许多电子表格模型的基础,但也是导致许多电子表格问题的根本原因。 理想情况下,IF 语句应适用于最小条件(例如 Male/Female 和 Yes/No/Maybe),但是对更复杂情况求值时则需要同时嵌套* 3 个以上的 IF 函数。

*“嵌套”是指在一个公式中连接多个函数的做法。

使用逻辑函数 IF 函数时,如果条件为真,该函数将返回一个值;如果条件为假,函数将返回另一个值。

语法

IF(logical_test, value_if_true, [value_if_false])

例如:

  • =IF(A2>B2,"超出预算","正常")

  • =IF(A2=B2,B4-A4,"")

参数名称

说明

logical_test   

(必需)

要测试的条件。

value_if_true   

(必需)

logical_test 的结果为 TRUE 时,您希望返回的值。

value_if_false   

(可选)

logical_test 的结果为 FALSE 时,您希望返回的值。

备注

虽然 Excel 允许嵌套最多 64 个不同的 IF 函数,但不建议这样做。 原因如下。

  • 要正确地构建多个 IF 语句需要花大量心思,并要确保其逻辑在直至结尾的每个条件下都能计算正确。 如果嵌套公式不是 100% 准确,那么计算过程可能花 75% 的时间,而返回结果可能花 25% 的时间,并且结果并不理想。 但是得出这 25% 结果的几率很小。

  • 多个 IF 语句维护起来非常困难,特别是过一段时间后回头再看,想要了解当时你(其他人的话更糟糕)想要做什么时。

如果发现 IF 语句似乎在无穷无尽地不断增加,这时候应放下鼠标,重新思考策略。

我们来了解一下如何使用多个 IF 正确创建一个复杂的嵌套 IF 语句,以及何时应使用 Excel 库中的其他工具。

示例

以下示例介绍了一个相对标准的嵌套 IF 语句,该语句将学生考试成绩转化为等效字母等级。

复杂的嵌套 IF 语句 - E2 中的公式为 =IF(B2>97,"A+",IF(B2>93,"A",IF(B2>89,"A-",IF(B2>87,"B+",IF(B2>83,"B",IF(B2>79,"B-",IF(B2>77,"C+",IF(B2>73,"C",IF(B2>69,"C-",IF(B2>57,"D+",IF(B2>53,"D",IF(B2>49,"D-","F"))))))))))))
  • =IF(D2>89,"A",IF(D2>79,"B",IF(D2>69,"C",IF(D2>59,"D","F"))))

    此复杂嵌套 IF 语句遵循一个简单逻辑:

  1. 如果 Test Score(单元格 D2)大于 89,则学生获得 A

  2. 如果 Test Score 大于 79,则学生获得 B

  3. 如果 Test Score 大于 69,则学生获得 C

  4. 如果 Test Score 大于 59,则学生获得 D

  5. 否则,学生获得 F

这个具体示例比较安全,因为考试成绩和字母等级之间的相关性不可能改变,所以不需要太多维护。 但想想 - 如果需要在 A+、A 和 A- 等等之间划分成绩应该怎么办? 现在 IF 语句包含 4 个条件,需要将其重写为包含 12 个条件! 公式如下所示:

  • =IF(B2>97,"A+",IF(B2>93,"A",IF(B2>89,"A-",IF(B2>87,"B+",IF(B2>83,"B",IF(B2>79,"B-", IF(B2>77,"C+",IF(B2>73,"C",IF(B2>69,"C-",IF(B2>57,"D+",IF(B2>53,"D",IF(B2>49,"D-","F"))))))))))))

该公式仍具有准确的功能并按预期工作,但需要花很长时间编写并花更长时间进行测试,才能确保该公式可完成所需操作。 另一个明显的问题是必须手动输入分数和等效字母等级。 不小心输错字的几率是多少? 想象一下,需要使用更复杂的条件 64 次! 当然这是可能实现的,但你真的想给自己带来这种麻烦和难以察觉的可能错误吗?

提示: Excel 中的每个函数都需要使用左括号和右括号 ()。 编辑时,Excel 会通过对公式的不同部分着色来帮助你定位。 例如,如果要编辑上面的公式,将光标移过每个右括号“)”时,它的相应左括号会显示相同颜色。 在复杂嵌套公式中检查是否拥有足够的匹配括号时,此方法尤其有用。

更多示例

下面是一个十分常见的示例 - 根据销售额等级计算销售佣金

单元格 D9 中的公式为 IF(C9>15000,20%,IF(C9>12500,17.5%,IF(C9>10000,15%,IF(C9>7500,12.5%,IF(C9>5000,10%,0)))))
  • =IF(C9>15000,20%,IF(C9>12500,17.5%,IF(C9>10000,15%,IF(C9>7500,12.5%,IF(C9>5000,10%,0)))))

此公式表示如果 (C9 大于 15,000 则返回 20%,如果 (C9 大于 12,500 则返回 17.5% 等等…

虽然该公式与前面的“成绩”示例非常相似,但它很好地说明了维护大型 IF 语句的难度 - 如果组织决定增加新的薪酬等级,甚至改变现有美元或百分比值,那么你需要做些什么? 必须手动完成大量工作!

提示: 为了使长公式更易于阅读,可在编辑栏中插入换行符。 只需在将文本换到新行前按 Alt+Enter。

下面是一个包含混乱逻辑的佣金方案示例:

D9 中的公式顺序颠倒,变为 =IF(C9>5000,10%,IF(C9>7500,12.5%,IF(C9>10000,15%,IF(C9>12500,17.5%,IF(C9>15000,20%,0)))))

发现问题了吗? 将销售额比较的顺序与上一示例的顺序进行比较。 此示例用的是哪种方式? 此示例采用自下而上(从 5,000 美元到 15,000 美元)而不是自上而下的方式。 但为什么说这是个大问题? 因为公式无法通过对任何超过 5,000 美元的值的第一次求值。 假设销售额为 12,500 美元 - IF 语句将返回 10%,因为该值大于 5,000 美元,所以公式将在此处停止。 此类问题很严重,因为在许多情况下,此类错误容易被忽视,直到产生负面影响才会被发现。 既然知道复杂嵌套 IF 语句具有严重缺陷,你能做些什么? 在大多数情况下,可使用 VLOOKUP 函数,而不是使用 IF 函数构建复杂公式。 若要使用 VLOOKUP,首先需要创建一个引用表:

单元格 D2 中的公式为 =VLOOKUP(C2,C5:D17,2,TRUE)
  • =VLOOKUP(C2,C5:D17,2,TRUE)

此公式表示在 C5:C17 区域中查找 C2 的值。 如果找到值,则从 D 列的同一行返回相应值。

单元格 C9 中的公式为 =VLOOKUP(B9,B2:C6,2,TRUE)
  • =VLOOKUP(B9,B2:C6,2,TRUE)

类似地,此公式将在 B2:B22 区域中查找单元格 B9 的值。 如果找到值,则从 C 列的同一行返回相应值。

注意: 这两个 VLOOKUP 公式在公式末尾使用 TRUE 参数,这表示需要它们查找适当的匹配项。 也就是说,它将匹配查找表中的精确值以及范围内的任何值。 在这种情况下,查找表需要按升序​​排序(从小到大)。

此处详细介绍了 VLOOKUP,但这比 12 级复杂嵌套 IF 语句要简单得多! 还有其他一些不太明显的优点:

  • VLOOKUP 引用表是开放的,易于查看。

  • 条件更改后,可轻松更新表值,无需更改公式。

  • 如果不希望他人查看或更改引用表,只需将其置于其他工作表。

你知道吗?

目前 IFS 函数可使用单个函数替代多个嵌套 IF 语句。 因此,对于最初的包含 4 个嵌套 IF 函数的成绩示例:

  • =IF(D2>89,"A",IF(D2>79,"B",IF(D2>69,"C",IF(D2>59,"D","F"))))

可使用单个 IFS 函数使其变得更简洁:

  • =IFS(D2>89,"A",D2>79,"B",D2>69,"C",D2>59,"D",TRUE,"F")

IFS 函数十分有用,因为无需担心所有这些 IF 语句和括号带来的麻烦。

注意: 仅当具有 Microsoft 365 订阅时,此功能才可用。 如果你是 Microsoft 365 订阅者,请确保拥有最新版本的 Office购买或试用 Microsoft 365

需要更多帮助吗?

可随时在 Excel 技术社区中咨询专家或在社区中获取支持。

相关主题

视频:高级 IF 函数 IFS 函数 (Microsoft 365、Excel 2016 及更高版本) COUNTIF 函数将根据单个条件 对值进行计数COUNTIFS 函数将根据多个条件对值进行计数SUMIF 函数将根据单个条件对值求和SUMIFS 函数将根据多个条件对值求和AND 函数OR 函数VLOOKUP 函数Excel 中的公式概述如何避免公式损坏检测公式中的错误逻辑函数Excel 函数 (按字母顺序)按类别) (Excel 函数

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。

社区可帮助你提出和回答问题、提供反馈,并听取经验丰富专家的意见。