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>,“超出预算”,“OK”)
- =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 (D2>89,“A”,IF (D2>79,“B”,IF (D2>69,“C”,IF (D2>59,“D”,“F”) ) ) )
此复杂嵌套 IF 语句遵循一个简单逻辑:
- 如果 Test Score(单元格 D2)大于 89,则学生获得 A
- 如果 Test Score 大于 79,则学生获得 B
- 如果 Test Score 大于 69,则学生获得 C
- 如果 Test Score 大于 59,则学生获得 D
- 否则,学生获得 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 将尝试在编辑公式时通过对公式的不同部分进行着色来帮助您确定格式的位置。 例如,如果您要编辑上述公式,当您将光标移过每个结尾括号“) ”时,其相应的左括号将变成相同的颜色。 当你试图弄清楚是否有足够的匹配括号时,这在复杂的嵌套公式中特别有用。
更多示例
下面是一个十分常见的示例 - 根据销售额等级计算销售佣金
- =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% 等等…
虽然它与早期的 Grades 示例非常相似,但这个公式是一个很好的例子,说明维护大型 IF 报表是多么困难——如果您的组织决定增加新的薪酬水平,甚至可能更改现有的美元或百分比值,您需要怎么做? 你手头上会有很多工作要做!
提示
为了使长公式更易于阅读,可在编辑栏中插入换行符。 只需在将文本换到新行前按 Alt+Enter。
下面是一个包含混乱逻辑的佣金方案示例:
你能看出哪里出现问题吗? 将销售额比较的顺序与上一示例的顺序进行比较。 此示例用的是哪种方式? 没错,它) 从下往上 (5,000 美元上涨到 15,000 美元,而不是相反。 但为什么说这是个大问题? 这是一件大事,因为对于任何超过 5,000 美元的价值,该公式都无法通过第一次评估。 假设你的收入为 12,500 美元,IF 语句将返回 10%,因为它大于 5,000 美元,并且将止步于此。 这可能是非常有问题的,因为在很多情况下,这些类型的错误在产生负面影响之前会被忽视。 既然知道复杂嵌套 IF 语句具有严重缺陷,你能做些什么? 在大多数情况下,可使用 VLOOKUP 函数,而不是使用 IF 函数构建复杂公式。 若要使用 VLOOKUP,首先需要创建一个引用表:
- =VLOOKUP(C2,C5:D17,2,TRUE)
此公式表示在 C5:C17 区域中查找 C2 的值。 如果找到值,则从 D 列的同一行返回相应值。
- =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 语句和括号。
需要更多帮助吗?
你随时可以在 Excel 技术社区 中咨询专家,或在 社区中获取支持。