所谓逻辑函数,就是专门处理逻辑值TRUE和FALSE的相关函数。在之前的章节里,对逻辑值处理最多的方式是将逻辑值进行算术运算。
IF函数是Excel工作表函数中应用最频繁的函数之一,广泛应用于各种数据判断。
函数语法说明:
IF(logical_test,[value_if_true],[value_if_false])
● logical_test:必需参数。计算结果可能为 TRUE 或 FALSE 的任意值或表达式。
● value_if_true:可选参数。logical_test 参数的计算结果为 TRUE 时所要返回的值。
● value_if_false:可选参数。logical_test 参数的计算结果为 FALSE 时所要返回的值。
最多可以使用64个IF函数作为value_if_true和value_if_false参数进行嵌套,以构造更详尽的判断条件。如果IF函数的任意参数为数组,那么在执行 IF 语句时,将会计算数组中的每一个元素。
下面先来看一个小故事,小明和小强都喜欢打篮球。小明身高185cm,小强身高176cm。他们决定参加校篮球队,但队长告诉他们俩,校队要求队员身高至少在180 cm及以上。小明很高兴,小强却很沮丧。
为什么小明高兴,小强沮丧?因为他们条件反射地在心里比较了自己是否符合标准。小明:185≥180,比较后的逻辑值是TRUE,条件成立,可以参加。小强:176≥180,比较后的逻辑值是FALSE,条件不成立,不能参加。那么可以用IF函数表述这种判断,并且根据产生的不同逻辑值,对应返回不同值。
小明:=IF(185>=180,〝可以参加〝,〝不能参加〝),条件成立,返回值:可以参加。
小强:=IF(176>=180,〝可以参加〝,〝不能参加〝),条件不成立,返回值:不能参加。
扩展一下,增加几个人,并且将IF函数应用到Excel中,如图3-1所示。
图3-1
编写IF函数之前最好是先思考你想要实现什么目的?需要进行什么比较?很多时候,编写IF函数就和在脑中进行逻辑思考一样简单,比如如果满足此条件应该怎样?如果不满足此条件应该怎样?始终确保计算步骤遵循正确的逻辑顺序,否则公式就不会按照你认为的方式执行。
实例26 根据价格表计算出采购清单的采购金额
问题描述: 图3-2所示的“采购清单”中显示了各商品的采购重量,“价格表”中显示了采购50kg以上和以下商品的单价,如果每天采购商品的重量大于或等于50kg,则按价格表中50kg以上的单价计算,否则按50kg以下的单价计算。值得注意的是,采购清单和价格表中的商品顺序是一样的。
图3-2
解决思路: 首先判断“采购清单”中每天采购的商品的重量是否大于或等于50kg,如果条件成立,则乘以“价格表”中50kg以上对应的单价,否则,乘以50kg以下对应的单价,最后再将相乘出来的结果求和即可。
操作步骤: 如图3-3所示,首先将鼠标光标定位在E3单元格中,输入数组公式=SUM(IF(B3:D3>=50,H$3:J$3,H$4:J$4)*B3:D3),然后按Ctrl+Shift+Enter组合键,再向下填充公式,完成计算。
图3-3
步骤1: 计算IF(B3:D3>=50,H$3:J$3,H$4:J$4)部分,运算原理为 ,运算结果为{13,2,6}。
步骤2: 将步骤1获得的单价乘以产品重量,得到各产品的金额。公式为{13,2,6}*B3:D3,运算结果为{1118,80,186}。
步骤3: 将步骤2的结果求和,得到每天的采购总金额,公式为SUM({1118,80,186}),结果为1384。
注意 在IF函数的第1参数中,除了TRUE表示成立,FALSE表示不成立,非零值数字相当于TRUE,零值相当于FALSE。
其实,IF函数的嵌套和普通函数的嵌套方法一样,只是由于IF函数有逻辑判断,所以我们需要根据判断结果跳转到不同的返回值,对于初学者来说,理解起来不像普通函数那样容易。
实例27 判断两科成绩同时大于或等于90分的学生为优秀(IF函数)
问题描述: 图3-4所示的表格中列出了每个学生“语文”和“数学”两科的成绩,现在需要将两科成绩同时大于或等于90分的学生评为优秀。
解决方法: 先用IF函数判断“语文”分数,如果大于或等于90分,则在IF函数的第2参数继续使用IF函数判断“数学”是否也大于或等于90分,如果条件成立则返回“优秀”。否则,其他任何情况都不是优秀。
操作步骤: 如图3-5所示,首先将鼠标光标定位在D2单元格,输入公式=IF(B2>=90,IF(C2>=90,〝优秀〝,〝〝),〝〝),然后按Enter键,再向下填充公式完成计算。
图3-4
图3-5
步骤1: 计算=IF(B
2>=90,IF(C2>=90,〝优秀〝,〝〝),〝〝)公式中的B2>=90部分,若条件成立则返回到IF函数第2参数 。
步骤2: 计算IF(C2>=90,〝优秀〝,〝〝)中的C2>=90部分,若条件成立,则返回=IF(TRUE,〝优秀〝,〝〝)。
步骤3: 计算=IF(TRUE,〝优秀〝,〝〝)部分,最后返回结果为优秀,只要前面两个步骤中任意一个步骤的比较结果为FALSE,返回结果都为空。
什么是引用?就是单元格引用,比如A1:C3就是标准引用。我们可以在IF函数的返回值放入单元格引用地址,这样返回值就具有引用特性,通过IF函数产生的引用,可以编写更灵活的公式。
实例28 根据选择的起始月份和终止月份汇总相应的销售数量
问题描述: 图3-6左边“各人员销售数量”表中列出每个人1月到3月的销售数量,在图3-6右边列出“起始月份”和“终止月份”,并在G5单元格中显示所选月份的数量之和。
图3-6
解决方法: 通过使用IF函数判断,如果起始月份是1月、2月、3月,则对应返回B3、C3、D3单元格,如果终止月份是1月、2月、3月,则对应返回B7、C7、D7单元格。由起始月份和终止月份对应返回的单元格组成一个引用区域,再进行求和。
操作步骤: 如图 3-7 所示,首先将鼠标光标定位在 G5 单元格,输入公式=SUM(IF(G3=〝1 月〝,B3,IF(G3=〝2月〝,C3,IF(G3=〝3月〝,D3))):IF(G4=〝1月〝,B7,IF(G4=〝2月〝,C7,IF(G4=〝3月〝,D7)))),然后按Enter键。
图3-7
步骤1: 计算SUM(IF(G3=〝1月〝,B3,IF(G3=〝2月〝,C3,IF(G3=〝3月〝,D3)))部分,G3表示要选择的起始月份,如果G3=〝1月〝,那么返回B3单元格;如果G3=〝2月〝,那么返回C3单元格;如果G3=〝3月〝,那么返回D3单元格。本实例应该返回B3单元格。
步骤2: 计算IF(G4=〝1月〝,B7,IF(G4=〝2月〝,C7,IF(G4=〝3月〝,D7))))部分,G4表示要选择的终止月份,如果G4=〝1月〝,那么返回B7单元格;如果G4=〝2月〝,那么返回C7单元格;如果G4=〝3月〝,那么返回D7单元格。本实例应该返回C7单元格。
步骤3: 步骤1和步骤2会根据选择的不同月份而返回不同的引用单元格。本实例返回的是B3和C7单元格,中间加一个冒号,就形成一个区域B3:C7,这个区域刚好选择的是1月和2月。
步骤4: 将前面几个步骤形成的单元格区域进行汇总,本实例是用SUM函数求和的,公式为SUM(B3:C7),结果为1256。
AND函数用于多条件判断,当所有参数的计算结果为TRUE时,则返回TRUE;只要有一个参数的计算结果为 FALSE,即返回 FALSE。
函数语法说明:
AND(logical1,[logical2],...)
● logical1:必需参数。要检验的第一个条件,其计算结果可以为TRUE或FALSE。
● logical2,...:可选参数。要检验的其他条件,其计算结果可以为TRUE或FALSE,最多可包含255个条件。
参数的计算结果必须是逻辑值(如TRUE或FALSE),或者参数必须是包含逻辑值的数组或引用。如果数组或引用参数中包含文本或空白单元格,则这些值将被忽略;如果指定的单元格区域未包含逻辑值,则AND函数将返回错误值#VALUE!。
实例29 判断两科成绩同时大于或等于90分的学生为优秀(AND函数)
问题描述: 图3-8所示的表中,如果每个学生的“语文”和“数学”两科成绩同时大于或等于90分,则在D列返回“优秀”,否则返回空文本。
解决方法: 此实例可以用IF函数的嵌套方法完成(见实例27),嵌套方法在逻辑上不好理解,如果将多个条件都写在AND函数中,那么在公式表达上看起来会更容易一些。
操作步骤: 如图3-9所示,那么首先将鼠标光标定位在D2单元格,输入公式=IF(AND(B2>=90,C2>=90),〝优秀〝,〝〝),按下Enter键,再将公式向下填充,完成计算。
图3-8
图3-9
步骤1: 计算AND(B2>=90,C2>=90)部分,判断B2和C2单元格的值是否同时大于或等于90,相当于AND(TRUE,TRUE),运算结果为TRUE。
步骤2: 将步骤1的逻辑值结果作为外层IF函数的第1参数进行运算,公式为IF(TRUE,〝优秀〝,〝〝),运算结果为“优秀”。
数组写法:首先在D2单元格中输入公式=IF(AND(B2:C2>=90),〝优秀〝,〝〝),然后按Ctrl+Shift+Enter组合键,再向下填充公式,完成计算。
OR函数用于多条件判断,如果有任一参数的计算结果为TRUE,则返回TRUE;如果全部参数的计算结果为 FALSE,则返回 FALSE。
函数语法说明:
OR(logical1,[logical2],...)
Logical1,logical2,...Logical1是必需参数,后面的逻辑值是可选参数。这些是1到255个需要进行测试的条件,测试结果可以为 TRUE 或 FALSE。
参数的计算结果必须是逻辑值(如TRUE或FALSE),或者参数必须是包含逻辑值的数组或引用,如果数组或引用参数中包含文本或空白单元格,则这些值将被忽略,如果指定的单元格区域未包含逻辑值,则AND函数将返回错误值#VALUE!。
实例30 判断三科成绩中只要有一科成绩大于或等于90分的学生为合格
问题描述: 图3-10所示的表格中显示了“语文”“数学”“英语”三科成绩,现在判断只要任意一科成绩大于或等于90分,则在“是否合格”列返回“合格”,否则返回为空。
图3-10
解决方法: 先分别判断每个学生的三科成绩是否大于或等于90分,将三科成绩分别放置在OR函数对应的3个参数中,只要有一个条件成立,则OR函数返回TRUE,然后用IF函数进行判断,如果值为TRUE则为“合格”,否则为空。
操作步骤: 如图3-11所示,首先将鼠标光标定位在E2单元格,输入公式=IF(OR(B2>=90,C2>=90,D2>=90),〝合格〝,〝〝),按下Enter键,再将公式向下填充,完成计算。
图3-11
步骤1: 计算OR(B2>=90,C2>=90,D2>=90)部分,判断B2、C2、D2任一单元格的值是否大于或等于90,相当于公式OR(FALSE,TRUE,FALSE),运算结果为TRUE。
步骤2: 将步骤1的结果作为外层IF函数的第1参数,公式为IF(TRUE,〝合格〝,〝〝),运算结果为“合格”。
数组写法:首先在E2单元格中输入公式=IF(OR(B2:D2>=90),〝合格〝,〝〝),然后按Ctrl+Shift+Enter组合键,再向下填充公式,完成计算。
NOT函数可以对参数值求反,当要确保一个值不等于某一特定值时,可以使用 NOT 函数。如果逻辑值为FALSE,则返回TRUE;如果逻辑值为TRUE,则返回FALSE。
函数语法说明:
NOT(logical)
● logical:必需参数。一个计算结果可以为 TRUE 或 FALSE 的值或表达式。
比如,=NOT(TRUE),返回值为FALSE;=NOT(FALSE),返回值为TRUE。