之前尝试用EXCEL拉了一张延迟退休表生成了文字版本而非图片版本的延迟退休表格。但也遗留了一个问题,就是如果根据单个表格内的出生日期,来计算延迟退休的日期。其实当时也做过类似的尝试了,这里尝试补完一下。
日期函数
在EXCEL中,类似2025/1/2
这样的标准日期数据,可以通过函数分别提取出年、月、日信息,函数名也很顾名思义,分别是:
YEAR()
MONTH()
DAY()
延迟月份计算尝试
因为男女退休年龄不同,女同胞又分为两档,这里就仅讨论男职工的退休,流程更为清晰一些。男职工的退休最早一批是自1965年1月开始。之前的其实基本不需要考虑了,因为在您看到这篇文章的时候,该退的已经退了,保险起见可以加一个判断,如果出生日期小月1965年(YEAR提取年份),则不考虑延迟退休。
首先计算需要延迟的月份数字,将当前出生年月减掉1965年再除以4,具体公式如下:
=INT(((YEAR(A2)-1965)*12+MONTH(A2)-1)/4)+1
但上述公式没有考虑上限,如果计算结果大于36的时候,仍旧以36计算,所以还需要添加一个判断:
=IF(INT(((YEAR(A2)-1965)*12+MONTH(A2)-1)/4)+1>36,36,INT(((YEAR(A2)-1965)*12+MONTH(A2)-1)/4)+1)
更方便的DATEDIF
查找相关资料的时候看到了这个函数,返回两个日期之间的年月日间隔数。常使用DATEDIF函数计算两日期之差。上面的复杂的计算用这个函数就简洁明了许多:
=DATEDIF(DATE(1965,0,1),B2,"m")
DATEDIF语法说明:
DATEDIF(start_date,end_date,unit)
Start_date 为一个日期,它代表时间段内的第一个日期或起始日期。(起始日期必须在1900年之后)
End_date 为一个日期,它代表时间段内的最后一个日期或结束日期。
Unit 为所需信息的返回类型。
Unit 返回
注:结束日期必须晚于起始日期
下面举个小例子:在日常工作中非常实用。
假如A1单元格写的也是一个日期,那么下面的三个公式可以计算出A1单元格的日期和编辑当天的时间差,分别是年数差,月数差,天数差。注意下面公式中的引号和逗号括号都是在英文状态下输入的。
=DATEDIF(A1,TODAY(),"Y")计算年数差
=DATEDIF(A1,TODAY(),"M")计算月数差
=DATEDIF(A1,TODAY(),"D")计算天数差
"Y" 时间段中的整年数。
"M" 时间段中的整月数。
"D" 时间段中的天数。
"MD" 起始日期与结束日期的同月间隔天数,忽略日期中的月份和年份。
"YD" 起始日期与结束日期的同年间隔天数,忽略日期中的年份。
"YM" 起始日期与结束日期的同年间隔月数,忽略日期中的年份。
因为男职工是每4个月增加一次,所以最终公式如下:
=INT((DATEDIF(DATE(1965,0,1),B2,"m")+3)/4)
中值函数
EXCEL中的median函数可以取到中值,在0,12,36
这3个数字中,它会返回12,而0,36,37
的情况,则返回36,当计算所得的延迟退休月份超过36个月时,中值函数会始终返回36,很巧妙的设置了数值上限。
=MEDIAN(0,12*3,INT((DATEDIF(DATE(1965,0,1),B2,"m")+3)/4))
EDATE函数
EDATE函数是Excel中的一个日期和时间函数,用于返回指定日期之后或之前的几个月的日期。其基本语法为:=EDATE(开始日期, 月数),其中“开始日期”是基准日期,可以是单元格的引用、日期函数的结果或直接输入的日期;“月数”是要增加或减少的月份数,正数表示未来日期,负数表示过去日期,零则返回开始日期。成品的计算公式如下:
//原60岁退休人员退休日期
=EDATE(B2,12*60+MEDIAN(0,12*3,INT((DATEDIF(DATE(1965,0,1),B2,"m")+3)/4)))
//原55岁退休人员退休日期
=EDATE(B2,12*55+MEDIAN(0,12*3,INT((DATEDIF(DATE(1970,0,1),B2,"m")+3)/4)))
//原50岁退休人员退休日期
=EDATE(B2,12*50+MEDIAN(0,12*5,INT((DATEDIF(DATE(1975,0,1),B2,"m")+1)/2)))
成品公式来自知乎,这里只是学习记录了一下应用到的公式。
公式来源链接:
https://zhuanlan.zhihu.com/p/720206336