如上图所示的数据表,A列是人名,B列是性别,C列是年龄。
假设男性60岁退休,女性55岁退休,现在需要在D列编写公式,判断相关人员是否已退休。
有的朋友编写函数公式如下:
=IF(OR(AND(B2="男",C2>=60),AND(B2="女",C2>=55)),"退休","")
AND(B2="男",C2>=60),判断男性是否应该退休,返回一个逻辑值TRUE或者FALSE。
AND(B2="女",C2>=55),判断女性是否应该退休,同样返回一个逻辑值TRUE或者FALSE。
然后使用OR函数将两个逻辑值串联;任意一个条件为真,则IF函数判断条件成立,返回文本值退休,否则返回假空。
公式的逻辑似乎是非常清晰的,但是长度看起来又有点儿复杂——如何简化呢?
……
首先从规则可以得知,大于等于60岁,不论男女,都应该退休了,所以判断性别是否为男,就是多余的,因此我们可以将公式简化如下:
=IF(C2>=60,"退休",IF(AND(C2>=55,B2="女"),"退休",""))
然后换个角度想一下,计算规则也可以表达为,如果性别为男,则年龄>=60岁退休,否则年龄>=50岁退休,因此我们可以将公式再简化如下:
=IF(C2>=IF(B2="男",60,55),"退休","")
IF(B2="男",60,55),根据性别,返回一个退休年龄,如果是男,返回60,否则返回55;然后用实际年龄和该退休年龄作比较,即可判断是否已退休。
……
还没完,它还可以更短。
IF(B2="男",60,55),这个IF函数计算结果是一个数值。在逻辑判断中,逻辑值和数值是可以相互转换的。如果你经常写函数,就会敏感的意识到这家伙还可以简化,比如:
=IF(C2>(B2="男")*5+54,"退休","")
如果B2性别为男,则B2="男"返回结果TRUE,也就是1,否则返回0。然后该值乘以5,再加54……也就是说,如果B2是男性,则返回结果59,否则返回54;然后判断C2的值是否大于该值,即可得知是否到了退休年龄。
你以为这就完了?
当然不!
=TEXT(C2-(B2="男")*5-55,"退休;")
=LEFT("退休",(C2>(B2="男")*5+54)*2)
=IF(SUM((C2&B2=ROW($55:$150)+(B2="男")*5&{"男","女"})*1),"退休","")
=VLOOKUP(C2-(B2="男")*5,{0,"";55,"退休"},2)
=LOOKUP(C2-(B2="男")*5,{0,"";55,"退休"})
=IF(OR(COUNTIFS(C2,">"&{54,59},B2,{"女","男"})),"退休","")
❼ SUMIFS表示既然COUNTIFS行,那它也必须行~
=IF(OR(SUMIFS(C2,C2,">"&{54,59},B2,{"女","男"})),"退休","")
……
联系客服