网络上介绍了许多在Excel软件中,用身份证号码提取年龄的公式,似乎用很简单的公式就能计算出周岁。
但是经过笔者的尝试真的没有那么简单,用那简单的公式计算出来的周岁往往是错的,不准确的。今天晚上我就跟身份证提取周岁的操作较了半天劲儿,碰到了各种疑难杂症,最终经过我的探索,得到了一些收获,在此总结如下,供大家参考。
一,身份证号不能用于公式计算,提取信息,如何处理?
首先发现从其他表格中拷贝过来的身份证号出了问题,怎么办?
在此过程中我遇到的第1个问题就是身份证号码表面上看起来是文本,但是输入公式后就是不能计算,这说明从其他表格身份证那一列拷贝过来的的身份证号码本身就有问题,不是合格的,可以供excel公式计算引用的数据。经过使用某工具检验,发现这些身份证号果然都是不合格的数据。
这可怎么办?怎样把这些不合规的身份证号转换成合规的身份证号呢?想起了我的老办法,就是先找个中介过渡一下,把它们处理成合规的数据。具体来说就是新建一篇word文档,在word文档中看看这些身份证号有什么格式上的问题,然后在word中利用批量查找替换的方法,去掉他们不合规的格式,把这些身份证号处理成为纯粹的,合规的数据。说干就干。
1,首先新建一篇空白的word文档,把身份证号从原始Excel表格中复制过来,以“仅粘贴文本”的方式粘贴过来。
果然就看到了问题,就是这些身份证号在格式上有猫腻儿,前后都多了许多符号。
2,使用word文档查找替换功能,格式上的符号也能查找替换,把身份证号前后的符号全部去掉。
3,接下来该做什么呢?
就是把处理好的身份证号码的文本转变成一列表格,以便于复制粘贴到 Excel表格中去。
具体操作看这里:
我们终于建立了只有一列的表格,把这列数据全部选中,把这一列身份证号码数据“复制”“粘贴”到excel表格里去,就是可以用于公式计算的合规的数据了。
由于身份证数字比较多,在往Excel单元格粘贴的时候,记得提前先把那一列设置成为纯文本格式。粘贴过去的身份证号码才没有问题。而且在Excel单元格里粘贴数据的时候像这样粘贴。
不是
二,得使用比较靠谱的身份证提取周岁计算公式,网上罗列的个别简单的公式都是有瑕疵的,结果不准确。比如这个:
在要计算年龄的单元格内输入YEAR(TODAY())-MID(F2,7,4),
问题在于:这个公式从身份证号码中提取出来的只有年份的4位数,这种计算方法是不准确的,得到的结果只能是个概数。
因为根据身份证号码包含的出生日期判断周岁,必须精确到出生的年月日那一天,不到那一天要减1,过了那一天(包含那一天)才是拿今年的数值减去身份证出生年的数值。
所以上面那个公式不可以用。
来自网络经过验证准确的三个公式,保存在此,供分享和我自己学习,在此感谢这些前辈。
1,=DATEDIF(IF(LEN(F2)=18,DATE(MID(F2,7,4),MID(F2,11,2),MID(F2,13,2)),IF(LEN(F2)=15,DATE("19"&MID(F2,7,2),MID(F2,9,2),MID(F2,11,2)),"")),TODAY(),"Y")
看到这个公式中包含了对身份证号码长度的判断,适用于包含着15位号码的身份证号码的计算,不过这种应用场景应该很少了。
2,
=IF((TODAY()-DATE(YEAR(TODAY()),MID(F2,11,2),MID(F2,13,2)))<0,(YEAR(TODAY())-MID(F2,7,4)-1),YEAR(TODAY())-MID(F2,7,4))
这是一位高人用一己之力构造的判断公式,包含着逻辑判断,没有过生日那一天,年份减1,过了生日那一天,不用减1.
3,最简单的公式来了,就用这两个中的一个吧。
前提是Excel版本支持。
=DATEDIF(TEXT(MID(F2,7,8),"0-00-00"),NOW(),"y")
或者=DATEDIF(TEXT(MID(B2,7,8),"0-00-00"),TODAY(),"y")
学习探索的过程很累,但是值得。
歇会儿。[啤酒]