计算工龄补贴你用了四个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个公式,一个比一个简短,然而谁又知道是不是还有更短的公式呢?

(0)

相关推荐