IF 函数 - 嵌套公式和避免错误
应用对象
Microsoft 365 专属 Excel Microsoft 365 Mac 版专属 Excel Excel 网页版 Excel 2024 Excel 2024 for Mac Excel 2021 Excel 2021 for Mac Excel 2019 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 技术社区中咨询专家或在社区中获取支持。

相关主题

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

需要更多帮助?

需要更多选项?

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