这不是工龄的算法,而是某单位的特定算法,不足1年的按1年算,每3年加1档,最低为3档。
YEARFRAC是计算两个日期差之间的天数与一年的天数的比值,此函数有三个参数,省略了第三参数,按每月30天/每年360天计;
INT(YEARFRAC($D$2,C3))+1)中的+1,是实现不满1年按1年算,也就是实现向上取整的功能,与ROUNDUP(YEARFRAC($D$2,C3),0)、CEILING(YEARFRAC($D$2,C3),1)目的相同;
/3再取整,是达到每3年加1档的目的,+3是基准,即不满3年的部分全部按3档算,以3档为起点。
再来说说此公式的不足之处:
=IF(INT((INT(YEARFRAC($D$2,C3))+1)/3)>0,INT((INT(YEARFRAC($D$2,C3))+1)/3)+3,3)与直接使用=INT((INT(YEARFRAC($D$2,C3))+1)/3)+3是一样的,根本无须用条件公式;
绝对引用相对引用不清,不便于填充,对D2的列标也用了绝对引用,右拉填充时不会跟随变动,未对C3的列标加绝对引用符$,右拉填充时会变动列标,正确用法应该是:=INT((INT(YEARFRAC(D$2,$C3))+1)/3)+3;
此公式的结果,对于空白单元或当天来上班,结果都显示为3,显然不可取,要加以改正,如:=IF(OR($C3="",$C3>=D$2),"",INT((INT(YEARFRAC(D$2,$C3))+1)/3)+3)。
我这边只说函数的意思,是否有问题由你来判断。
=IF(INT((INT(YEARFRAC($D$2,C3))+1)/3)>0,INT((INT(YEARFRAC($D$2,C3))+1)/3)+3,3)
IF 判断,满足 (INT((INT(YEARFRAC($D$2,C3))+1)/3)>0 的条件时时输出 INT((INT(YEARFRAC($D$2,C3))+1)/3)+3 否则为3
先看判断条件 INT((INT(YEARFRAC($D$2,C3))+1)/3)>0
INT是向下取整的意思,比如1.1,或者1.9,都取值1
YEARFRAC 是计算两个日前值的差,比如数据中的$D$2,C3,其中D2为固定值。C3-D2为员工工作年限,向下取整,如不到一年为0,1年364天,为1年。
INT((INT(YEARFRAC($D$2,C3))+1)/3)>0 可以理解为 取整(取整(工作年限)+1)除以3如果大于0,那么输出 INT((INT(YEARFRAC($D$2,C3))+1)/3)+3 这个公式。但这个公式有问题,结果是必然大于0(因为有+1)的,也就是说,3不会为结果,只会存在一个结果
那我们来看结果
INT((INT(YEARFRAC($D$2,C3))+1)/3)+3
和判断条件一样,结果+3,假设员工来了11个月,结果是3.33,如果来了1年,结果过是3.66,如果是2年,结果过是4。
具体为什么这么算。真的不知道- -!
低于3年的算1档,而不是零档;
YEARFRAC 函数:返回小数。+1 /3 然后取整int,得到工龄档数。
INT()函数,功能为向下取整为最接近的整数;所以第二个参数+3;