在制作“法定退休年龄对照表”的时候遇到了一个小问题,月份是可以自动填充的,每4个月自动增加1个月的逻辑也可以被自动填充。但“改革后法定退休年龄”这一栏的逻辑就稍微复杂了一点,依赖自动填充就不可取了。
改革后法定退休年龄
“改革后法定退休年龄”这一栏的数据可以依赖前一栏的“延迟月数”,如果延迟一个月,那么分两部分计算,周岁按60+INT(1/12)
岁,类似于c++,这里的INT
函数会自动向下取整,后面的月份则利用求余MOD(延迟月数栏数据,12)
获得。
整体的公式如下:
=60+INT(C2/12)&"岁"&IF(MOD(C2,12),MOD(C2,12)&"个月","")
&
符号连接字符串的功能很强,起初以为需要用小括号来标注出公式,实际上是画蛇添足了,&
在连接之前会自动计算分项的数值。因为当求余为0时会出现“62岁0个月”这样的情况,所以最后增加了一个IF
判断,值为真时就附加X个月
,值为假时则附加空值,这样在整周岁的时候就不会出现0个月这样的错误说法了。
改革后退休时间
重新检查的时候发现,改革后退休时间有重大错误,如上图,因为2025年5月之后会退休时间顺延一个月,所以没有男同胞可以在2025年6月退休,这里的月份并不连续,所以不应该自动填充。
C2位是一个合并单元格,如果去取C345的数据,都会得到一个0,但B2到B5都应用了C2的数据,但直接自动填充会造成C2的逐次累加,导致错误的结果,这个时候只需要将B3,B4,B5项的公式中对应项手动修改为C2,就可以愉快的下拉自动填充了。
B2
=IF(MOD((C2+MONTH(A2)),12),YEAR(A2)+60+INT((C2+MONTH(A2))/12)&"年"&MOD((C2+MONTH(A2)),12)&"月",YEAR(A2)+60+INT((C2+MONTH(A2))/12)-1&"年"&"12月")
B3
=IF(MOD((C2+MONTH(A3)),12),YEAR(A3)+60+INT((C2+MONTH(A3))/12)&"年"&MOD((C2+MONTH(A3)),12)&"月",YEAR(A3)+60+INT((C2+MONTH(A3))/12)-1&"年"&"12月")
B4
=IF(MOD((C2+MONTH(A4)),12),YEAR(A4)+60+INT((C2+MONTH(A4))/12)&"年"&MOD((C2+MONTH(A4)),12)&"月",YEAR(A4)+60+INT((C2+MONTH(A4))/12)-1&"年"&"12月")
B5
=IF(MOD((C2+MONTH(A5)),12),YEAR(A5)+60+INT((C2+MONTH(A5))/12)&"年"&MOD((C2+MONTH(A5)),12)&"月",YEAR(A5)+60+INT((C2+MONTH(A5))/12)-1&"年"&"12月")
因为在计算过程中,下列语句:
YEAR(A5)+60+INT((C2+MONTH(A5))/12)&"年"&MOD((C2+MONTH(A5)),12)&"月"
会把23年12月计算为24年0月,所以增加了一条判断,当MOD((C2+MONTH(A5)),12)
值为0时,即刚好是某年12月时,将计算所得年份再减1,连接“12月”,制表时一边测试一边打补丁,最终写成了上述厄长的形式。-_-~~