用函数计算工龄 | 您所在的位置:网站首页 › 按工龄计算年假的公式 › 用函数计算工龄 |
在Excel中进行法定年假的计算,不使用数组函数以及lookup函数的情况下,只借助工龄一个参数就可计算法定年假,同时还解决了年假“临界点”的问题,即在当年年中工龄满1年、10年、20年的情况。 首先我们来看法定年假的规定: 职工累计工作已满1年不满10年的,年休假5天;已满10年不满20年的,年休假10天;已满20年的,年休假15天。可以看到其中有4个阶梯/级别: 不满1年,0天1年以上不满10年,5天10年以上不满20年,10天20年以上,15天然而实际操作中,员工的工龄不可能都是从每年1月1日开始算的,所以正常情况下,工龄满1年、10年、20年都是发生在年中的。 那以去年毕业的应届生为例,到今年7月份即工龄满1年,那么从这个时候开始,这位应届生在今年实际上差不多是有半年时间可以按5天/年的标准享有年假,即2.5天。 (这里补充一下,所以实际操作中年假的计算,都是按照截止当年年底12月31日时工龄来计算的) 这样一来,我们发现在实际操作中,法定年级的计算阶梯有7个,详见下图。我们设工龄为x,我们还是以上面的应届生为例,到今年年底他的工龄是1.5年,则可享有年假为5(1.5-1)=2.5天。 若以今年年底工龄为10.5年的老员工为例,他可享有的年假为5(11-10.5)+10(10.5-10)=7.5天。 注:上述公式是通过化简原始公式5*[1-(x-10)]+10*(x-10)所得到的。 看到这里大家不难发现,从计算的逻辑上来讲,我们需要的只是工龄的小数部分。以5(11-x)+10(x-10)为例,Excel中可以用Mod或者Int函数获取工龄的小数部分,比如用Mod函数就是5*(1-Mod(x,1))+10*Mod(x,1) 。因为我随后需要将这个公式套用到Access里去,虽然Access表达式支持Int函数,但是我怕表达式太复杂产生问题,所以这里还是用了最简单的代数式,其实化简之后并没有太复杂。 ![]() 逻辑厘清了之后那就是写 If 函数了,这个7个阶梯/级别怕不是要6个If嵌套,想想就是脑壳痛。然后我试着用Excel组织了一下,如图: ![]() 接下来可以按照Excel的布局来修改参数,大家看到里面只有一个参数x,即工龄,那比如在我们的表格中,工龄是在C列第6行开始,那可以把公式中的x替换为C6,这个在Excel中用Ctrl+F替换即可实现。然后把这部分内容复制下来,黏贴到剪贴板中,再删去空格和换行就可以了,这里略过不谈。 处理好的公式如下: INT(IF(C6>=21,15,IF(C6>=20,(5*C6-90),IF(C6>=11,10,IF(C6>=10,(5*C6-45),IF(C6>=2,5,IF(C6>=1,(5*C6-5),0)))))))法定年假以整天计算,所以前面加了Int函数进行取整。 |
CopyRight 2018-2019 实验室设备网 版权所有 |