为什么说0和1是Excel函数逻辑运算的核心要义?

每天一篇Excel技术图文
微信公众号:Excel星球
NO.723-0和1的故事
作者:看见星光
微博:EXCELers / 知识星球:Excel

HI,大家好,我是星光。

之前我们花费很大的篇幅,给大家详细讲解了IF函数和它两个亲密的小伙伴AND与OR。AND函数可以执行'并且'条件的判断,OR可以执行'或'条件的判断——但我这会儿忽然很严肃的告诉你,向我这样的高手(什么眼神?在下身高1米85不高吗?),几乎从来不使用这俩函数,你会作何感想?

如果不用AND和OR函数,那我们用什么呢?

你还记得吗?在什么是Excel数据类型章节里,咱们讲过逻辑值是可以参与数学运算的。

其中TRUE视为1,比如公式:=TRUE+1,结果等于2。

另一个逻辑值FALSE视为0,比如公式:=FALSE+1,结果等于1。

那么反过来,数值能否参与逻辑判断呢?

也可以。

比如……

公式:= IF(1, TRUE, FALSE)

结果为TRUE。

这意味着在IF函数眼中,1就等同于逻辑值TRUE。

公式:= IF(0, TRUE, FALSE),

结果为FALSE。

这意味着在IF函数眼中,0就等同于逻辑值FALSE。

公式:= IF(-1, TRUE, FALSE)

结果为TRUE,这意味着在IF函数眼中,负数也等同于逻辑值TRUE。

事实上,在工作表函数的逻辑判断中,所有的数值,除了0,不管是正数、负数、小数都等同于TRUE,只有0是假的。

在IF这厮看来,你腰缠万贯,是有钱人,你负债千万,还是有钱人,哪怕你只有一毛钱——那也是有钱人。只有你一分钱也无,才算是真正的一无所有的穷光蛋,是个FALSE。

所以,虽然说函数不是人,但它冷酷无情起来——那真不是人。

……

既然逻辑值能参与数学运算,数值又能够替代逻辑值做真假判断,那么多条件的逻辑表达式,也就是AND和OR函数,我们就可以改用乘法和加法了。

这句话怎么说?

我举个例子。

如上图所示,在D列计算A列的同学是否属于优秀生;当B列语文和C列数学两科得分均高于90分,就算优秀生。

AND函数是这样的:

=IF(AND(B2>90,C2>90),'优秀','')

使用乘法表达式是这样的:

=IF((B2>90)*(C2>90),'优秀','')

在上述公式中,(B2>90)*(C2>90)部分可能有3种计算结果。

第1种情况:

B2>90计算结果为TRUE,C2>90计算结果也为TRUE,TRUE*TRUE=1*1,结果为1,在逻辑判断中,所有的数值除了0以外都为真,说明IF的判断条件成立。

第2种情况:

B2<90或C2<90有一条是成立的,另外一条不成立,也就是说两个判断条件里有一条会返回FALSE。在数学运算中,FALSE等同于0,零乘以任何数值结果必然为零。而在逻辑判断中,0为假,这就说明IF的判断条件不成立。

第3种情况:

B2<90和C2<90两条都不成立,结果都返回FALSE,FALSE*FALSE=0*0,IF函数计算结果显然等同于第2种情况。

总结一下:

逻辑值FALSE在数学运算中被视为0,TRUE会被视为1。而在乘法运算中,0乘以任何数值结果均为0,所以只有当每一个表达式计算结果均为TRUE时,整个条件方才成立,否则不成立——这,不就是一个赤果果的'并且'关系的概念吗?

因此AND函数完全可以被乘法代替。总结套路如下(注意括号的存在)

=(条件1)*(条件2)*(条件n)

没有广告的微信文是不真诚的..▼

……

现在,我们调整下优秀生的规则,只要B列语文或C列数学有一门成绩达到90分以上,就可以被评为优秀生。

OR函数是这样的:

=IF(OR(B2>90,C2>90),'优秀','')

我们可以用加法来代替OR:

=IF((B2>90)+(C2>90),'优秀','')

加法又怎么理解呢?

在所有的逻辑判断表达式里,只要有一个是真的,就会返回TRUE。

这是因为TRUE在数学运算中作为1,1加上任何一个大于等于0的数值,结果必然大于0,所以即便剩下的表达式全部不成立,全部返回FALSE,你手上的筹码也会大于0。而在逻辑判断中,所有非0的数值均被视为真,也就是条件成立。

什么时候条件不成立呢?所有的表达式全部返回FALSE的时候,无数个0相加,结果还是0,在逻辑判断中,0被视为假,所以条件也就不成立了。

这不就是一个'或'关系的概念吗?

因此OR函数完全可以被加法代替。总结套路如下(注意括号的存在)

=(条件1)+(条件2)+(条件n)

……

也许你会想,即便AND函数能用乘法表示,OR函数能用加法表示,也不至于你们就把AND和OR淘汰了啊?我也没看出来乘法就比AND函数简便多少?

你最帅,但你说的不大对。

AND和OR能干的事,乘法和加法都能做。但乘法和加法能做的事,前者就不一定做的来了。

乘法、加法相比于AND、OR的优势,一方面在于当有多层复杂逻辑值嵌套时,编写会更简洁清晰,另一方面,最主要的是它俩支持数组运算,能够返回多个可用于逻辑判断的数值,而AND和OR只能返回一个值。

这对于数组运算来说,是极其重要的。

举一个浅尝则止的小栗子。

如上图所示,B列是性别,C是列年龄,D列是工资。我们现在需要计算性别为男、年龄大于30的人,工资总计是多少?

这是一个并且关系的逻辑问题,需要性别和年龄两个条件同时成立,如果使用SUMPRODUCT函数,我们会把公式写为:

=SUMPRODUCT((B2:B7='男')*(C2:C7>30)*D2:D7)

但我们不能把该公式写成:

=SUMPRODUCT(AND(B2:B7='男',C2:C7>30)*D2:D7)

(B2:B7='男')*(C2:C7>30)返回的是一组值,比如此例中返回内存数组:{1;1;0;1;0;0}

AND(B2:B7='男',C2:C7>30)只返回一个值,AND要求所有的条件均为TRUE,结果才为TRUE,否则就返回FALSE。本例中,B2:B7并非全部等于男,因此AND会返回结果FALSE。

没了,今天给大家分享的内容就这些。看起来似乎很简单,却是函数逻辑运算中最常使用的套路和技巧——以后你会适应它的。

(0)

相关推荐