Table of contents
本教程介绍了如何在Excel中使用嵌套的IF函数来检查多个条件。 你还将学习其他一些函数,它们可能是在Excel中使用嵌套公式的良好替代方案。
你通常如何在你的Excel工作表中实现决策逻辑? 在大多数情况下,你会使用一个IF公式来测试你的条件,如果满足条件,返回一个值,如果不满足条件,返回另一个值。 为了评估一个以上的条件,并根据结果返回不同的值,你把多个IF嵌套在彼此之间。
虽然非常流行,但嵌套的IF语句并不是在Excel中检查多个条件的唯一方法。 在本教程中,你会发现一些绝对值得探索的替代方法。
Excel嵌套的IF语句
下面是经典的Excel嵌套IF公式的通用形式。
IF( 条件1 , 结果1 , IF( 条件2 , 结果2 , IF( 条件3 , 结果3 , 结果4 )))你可以看到,每个后续的IF函数都被嵌入到了 value_if_false 每个IF函数都用自己的小括号括起来,但所有的小括号都在公式的最后。
我们的通用嵌套IF公式评估了3个条件,并返回4个不同的结果(如果没有一个条件是TRUE,则返回结果4)。 翻译成人类语言,这个嵌套IF语句告诉Excel做以下事情。
测试 条件1 , 如果是TRUE - 返回 结果1 , 如果是FALSE -测试 条件2 , 如果是TRUE - 返回r esult2 , 如果是FALSE -
测试 条件3 , 如果是TRUE - 返回 结果3 , 如果是FALSE -
返回 结果4
作为一个例子,让我们根据一些卖家的销售量来找出他们的佣金。
委员会 | 销售 |
3% | $1 - $50 |
5% | $51 - $100 |
7% | $101 - $150 |
10% | 超过150美元 |
在数学中,改变加数的顺序不会改变总和,而在Excel中,改变IF函数的顺序会改变结果。 为什么呢? 因为嵌套的IF公式会返回一个对应于 第一个TRUE条件 因此,在你的嵌套IF语句中,按照正确的方向安排条件是非常重要的--从高到低或从低到高,这取决于你的公式逻辑。 在我们的例子中,我们先检查 "最高 "条件,然后是 "第二高",以此类推。
=IF(B2>150, 10%, IF(B2>=101, 7%, IF(B2>=51, 5%, IF(B2>=1, 3%, "" ))))
如果我们按照相反的顺序,从下往上放置条件,结果就会完全错误,因为我们的公式会在第一个逻辑测试(B2>=1)后停止任何大于1的值。比方说,我们有100美元的销售额--它大于1,所以公式就不会检查其他条件,并返回3%作为结果。
如果你想把条件从低到高排列,那么就使用 "小于 "运算符,先评估 "最低 "条件,然后是 "第二低",以此类推。
=IF($B2<1, 0%, IF($B2<51, 3%, IF($B2<101, 5%, IF($B2<=150, 7%, 10%))))
正如你所看到的,要正确构建一个嵌套的IF语句的逻辑,需要花很多心思。 虽然微软Excel允许在一个公式中嵌套多达64个IF函数,但这并不是你真正想在工作表中做的事情。 因此,如果你(或其他人)正在凝视你的Excel嵌套IF公式,试图弄清楚它到底是做什么的,现在是时候了重新考虑你的策略,并可能在你的武器库中选择另一种工具。
更多信息,请参见Excel嵌套IF语句。
带有OR/AND条件的嵌套IF
如果你需要评估几组不同的条件,你可以使用OR以及AND函数来表达这些条件,将这些函数嵌套在IF语句中,然后再将IF语句相互嵌套。
在Excel中用OR语句嵌套IF
通过使用OR函数,你可以在每个IF函数的逻辑测试中检查两个或多个不同的条件,如果任何(至少一个)OR参数评估为TRUE,则返回TRUE。 要了解它的实际工作情况,请考虑以下例子。
假设你有两列销售额,例如B列中的一月份销售额和C列中的二月份销售额。 换句话说,你建立一个公式,其逻辑如下:如果一月份或二月份的销售额大于150美元,卖家可以得到10%的佣金,如果一月份或二月份的销售额大于或等于101美元,卖家得到7%的佣金,以此类推。
要做到这一点,可以写一些OF语句,如OR(B2>150, C2>150),并将它们嵌套到上面讨论的IF函数的逻辑测试中。 结果是,你得到这个公式。
=IF(OR(B2>150, C2>150), 10%, IF(OR(B2>=101, C2>=101),7%, IF(OR(B2>=51, C2>=51), 5%, IF(OR(B2>=1, C2>=1), 3%, "" ))))
并根据较高的销售金额分配佣金。
更多公式实例,请参见Excel IF OR 语句。
在Excel中用AND语句嵌套IF
如果你的逻辑测试包括多个条件,并且所有这些条件都应该评估为 "真",那么就用AND函数来表达。
例如,如果要根据较低的销售数量分配佣金,可以采用上述公式,用AND语句代替OR语句。 换句话说,你告诉Excel只有在1月和2月的销售额大于150美元时才返回10%,1月和2月的销售额大于或等于101美元时返回7%,以此类推。
=IF(AND(B2>150, C2>150), 10%, IF(AND(B2>=101, C2>=101), 7%, IF(AND(B2>=51, C2>=51), 5%, IF(AND(B2>=1, C2>=1), 3%, "" ))))
结果,我们的嵌套IF公式根据B列和C列中较低的数字来计算佣金。如果任何一列是空的,就根本没有佣金,因为没有满足AND条件。
如果你想返回0%而不是空白单元格,请将最后一个参数中的空字符串(''")替换为0%。
=IF(AND(B2>150, C2>150), 10%, IF(AND(B2>=101, C2>=101), 7%, IF(AND(B2>=51, C2>=51), 5%, IF(AND(B2>=1, C2>=1), 3%, 0% ))))
更多信息可以在这里找到:Excel IF有多个AND/OR条件。
在Excel中用VLOOKUP代替嵌套的IF
当你处理 "尺度 "时,即连续的数值范围一起覆盖整个范围,在大多数情况下,你可以使用VLOOKUP函数而不是嵌套的IFs。
首先,制作一个参考表,如下面的截图所示。 然后,建立一个Vlookup公式,其中包括 近似匹配 ,即与 范围查询 参数设置为TRUE。
假设查询值在B2,参考表是F2:G5,公式如下。
=vlookup(b2,$f$2:$g$5,2,true)
请注意,我们修复了 表_数组 用绝对引用($F$2:$G$5)将公式正确复制到其他单元格。
通过将Vlookup公式的最后一个参数设置为TRUE,你告诉Excel去搜索 最匹配的 - 如果没有找到完全匹配的值,则返回小于查找值的下一个最大值。 因此,你的公式不仅会匹配查找表中的精确值,而且还会匹配介于两者之间的任何值。
例如,B3的查询值是$95,这个数字在查询表中不存在,在这种情况下,精确匹配的Vlookup会返回#N/A错误。 但是,近似匹配的Vlookup继续搜索,直到找到最近的小于查询值的值(在我们的例子中是$50),并从同一行的第二列返回一个值(是5%)。
但如果查询值小于查询表中最小的数字或查询单元格是空的怎么办? 在这种情况下,Vlookup公式将返回#N/A错误。 如果这不是你实际想要的,将VLOOKUP嵌套在IFERROR内,当查询值未找到时,提供输出值。 例如。
=IFERROR(VLOOKUP(B2, $F$2:$G$5, 2, TRUE), "超出范围")
重要提示!为了使近似匹配的Vlookup公式能够正确工作,查询表中的第一列必须按以下方式排序 升序 从最小到最大。
更多信息,请参见精确匹配VLOOKUP与近似匹配VLOOKUP。
IFS语句作为嵌套IF函数的替代品
在Excel 2016及以后的版本中,微软引入了一个特殊函数来评估多个条件--IFS函数。
一个IFS公式可以处理多达127个 逻辑_测试 / value_if_true 对,而第一个评估为 "真 "的逻辑测试 "赢"。
IFS(logical_test1, value_if_true1, [logical_test2, value_if_true2] ...)根据上述语法,我们的嵌套IF公式可以这样重构。
=IFS(B2>150, 10%, B2>=101, 7%, B2>=51, 5%, B2>0, 3%)
请注意,如果没有一个指定的条件得到满足,IFS函数会返回#N/A错误。 为了避免这种情况,你可以再添加一个 逻辑_测试 / value_if_true 到你的公式的末尾,如果前面的逻辑测试没有一个是TRUE,它将返回0或空字符串("")或任何你想要的值。
=IFS(B2>150, 10%, B2>=101, 7%, B2>=51, 5%, B2>0, 3%, TRUE, "" )
因此,如果B列中的相应单元格是空的或包含文本或负数,我们的公式将返回一个空字符串(空白单元格)而不是#N/A错误。
注意:与嵌套的IF一样,Excel的IFS函数返回一个与第一个评估为TRUE的条件相对应的值,这就是为什么IFS公式中逻辑测试的顺序很重要。
更多信息,请参见Excel IFS函数代替嵌套IF。
在Excel中用CHOOSE代替嵌套的IF公式
在Excel中测试单个公式中的多个条件的另一种方法是使用CHOOSE函数,该函数旨在根据该值的一个位置从列表中返回一个值。
应用于我们的样本数据集,该公式具有以下形状。
=CHOOSE((B2>=1) +(B2>=51) +(B2>=101) +(B2>150), 3%, 5%, 7%, 10%)
在第一个参数( index_num 鉴于TRUE等于1,FALSE等于0,这样就可以计算出要返回的值的位置。
例如,B2的值是150美元,对于这个值,前3个条件是 "真",最后一个条件(B2> 150)是 "假"。 所以。 index_num 等于3,意味着返回第3个值,即7%。
提示:如果没有一个逻辑测试为 "真"。 index_num 一个简单的解决方法是将CHOOSE包裹在IFERROR函数中,像这样。
=IFERROR(CHOOSE((B2>=1) + (B2>=51) + (B2>=101) + (B2>150), 3%, 5%, 7%, 10%), "")
欲了解更多信息,请参见Excel CHOOSE函数与公式实例。
SWITCH函数是Excel中嵌套IF的一种简洁的形式
在你处理一组固定的预定义值而不是刻度的情况下,SWITCH函数可以成为复杂的嵌套IF语句的一个紧凑的替代方案。
SWITCH(expression, value1, result1, value2, result2, ..., [default])SWITCH函数评估了 表情 对照列表中的 价值 并返回 结果 对应于第一个发现的匹配。
如果,你想根据以下等级计算佣金,而不是销售金额,你可以在Excel中使用这种紧凑的嵌套IF公式。
=switch(c2, "a", 10%, "b", 7%, "c", 5%, "d", 3%, "" )
或者,你可以像下面的截图那样制作一个参考表,并使用单元格参考而不是硬编码值。
=switch(c2, $f$2, $g$2, $f$3, $g$3, $f$4, $g$4, $f$5, $g$5, "" )
请注意,我们锁定了所有的引用,除了第一个带有$符号的引用,以防止在将公式复制到其他单元格时它们发生变化。
注意:SWITCH功能仅在Excel 2016及以上版本中可用。
欲了解更多信息,请参见SWITCH函数--嵌套IF语句的紧凑形式。
在Excel中串联多个IF函数
正如前面的例子所提到的,SWITCH函数只在Excel 2016中引入。 要在旧的Excel版本中处理类似的任务,你可以通过使用连接运算符(&)或CONCATENATE函数来组合两个或多个IF语句。
比如说。
=(IF(C2="a", 10%, "") & IF(C2="b", 7%, "") & IF(C2="c", 5%, "") & IF(C2="d", 3%, "") )*1
或
=CONCATENATE(IF(C2="a", 10%, ""), IF(C2="b", 7%, ""), IF(C2="c", 5%, "") & IF(C2="d", 3%, "") )*1
你可能已经注意到,我们在两个公式中都将结果乘以1。 这样做是为了将串联公式返回的字符串转换为数字。 如果你的预期输出是文本,那么就不需要进行乘法运算。
更多信息,请参见Excel中的CONCATENATE函数。
你可以看到,Microsoft Excel为嵌套IF公式提供了一些很好的替代方案,希望本教程能给你一些线索,告诉你如何在你的工作表中利用它们。 要想仔细看看本教程中讨论的例子,欢迎你下载我们下面的样本工作簿。 感谢你的阅读,希望下周在我们的博客上见到你!
供下载的实践工作手册
Excel嵌套If语句--实例(.xlsx文件)