计算工龄补贴你用了四个IF,我只用了一个INT
今天这个问题来自于微信群的一位朋友,是一个计算工龄补贴的问题,问题是:计算出来的补贴无法求和:
在公式中,数字常量是不需要加引号的,加引号的数字会被视为文本,单独看每个人的结果虽然正确,但是使用sum函数无法直接对文本型的数字求和。
只要将公式中的双引号全部去掉,这位群友的问题就能解决。
这个公式用了四个IF,公式好不好先不说,站在解决问题的角度来说没毛病,而且前面三个IF用的还很标准。
但是站在解题的角度来说,这个问题确实是挺常见的。所以模拟了一个练习数据,按照题主的计算规则分享几种解法。如图所示:
公式1:IF的套路
=IF(B2>=15,300,IF(B2>=10,200,IF(B2>=5,100,0)))
这是顺着题主的思路去写的公式,标准的IF嵌套模式,补贴一共四个等级,只需要三个IF就能搞定。
不过三个IF的话,老菜鸟更喜欢下面这个写法。
公式2:IF套路翻转
=IF(B2<5,0,IF(B2<10,100,IF(B2<15,200,300)))
只是将>=变成了<,同时改变层级判断的顺序,公式看上去就短了一点。
对比公式1和公式2,有助于理解比较符号和判断顺序之间的联系。
公式3:提取公因数
=IF(B2<5,0,IF(B2<10,1,IF(B2<15,2,3)))*100
与公式2的思路一致,只是将100放到IF的外面,有点类似提取公因数的感觉。
这种思路在化简公式的时候很常见,例如那个经典的计算个税的公式中,就用到了这种方法。
公式4:放弃IF,使用LOOKUP
=LOOKUP(B2,{0,0;5,100;10,200;15,300})
这个公式是LOOKUP的经典用法之一,需要注意的是第二参数中逗号和分号的位置,这里是构造了一个2*4的数组。
如果不习惯的话可以用下面这种写法:
=LOOKUP(B2,{0,5,10,15},{0,100,200,300})
将年限区间与补贴值分开更容易理解,需要注意的是年限区间使用对应的下限值。
公式5:放弃函数,使用逻辑值
=(B2>=5)*100+(B2>=10)*100+(B2>=15)*100
完全是利用逻辑值进行计算,意思也好理解,工龄够5年补贴100,够10年再补贴100,够15年再补贴100,累加即可。
公式6:继续提取公因数
=((B2>=5)+(B2>=10)+(B2>=15))*100
这个公式就没什么好解释的了,完全就是提取公因数。
是不是感觉有点像做数学题了,其实更像数学题的是下面这个公式。
公式7:没有最短只有更短
=MIN(300,INT(B2/5)*100)
这个公式完全利用了补贴中的规律性,每个层级的年限间隔都是5,补贴的差额是100。
使用工龄除以5得到的整数部分,再乘以100,就是对应的补贴,这完全就是数学思路了。
为了保证不会有超过300的补贴,在外面再加个MIN函数做限制,这个公式的思路就是如此。
比较以上分享的7个公式,一个比一个简短,然而谁又知道是不是还有更短的公式呢?