ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4301|回复: 29

[求助] 如何快速自动判断将出生日期20**年修改为19**年?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-10-5 18:48 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 wwwconsumer 于 2013-10-6 08:30 编辑

笔者所在的一家大型跨国公司,员工有几千人,但在汇总身份证时发现有以下错误:出身日期有时为1950年的错录为2050年,月、日都没错。笔者也想通过身份证号码转化出生日期函数直接更改,函数是这样的:=IF(LEN(f2)=18,CONCATENATE(MID(f2,7,4),"-",MID(f2,11,2),"-",MID(f2,13,2)),CONCATENATE(19,MID(f2,7,2),"-",MID(f2,9,2),"-",MID(f2,11,2))) ,但发现有以下几个问题:1、根据中国身份证号修改时,但个别中国身份证号是错误的(见图一)
图一.JPG
还有就是如果是港澳台、外国人的话也函数也不适用(见图二)。

图二

图二

笔者的思路是:1、首先判断是否为中国身份证,如果是的话(15位或18位数字),就直接通过函数转成出生日期和后面的性别;2、如果中国身份证录入错误的话,或者港澳台外国身份证的话(非15位或18位数字),就对出生日期直接进行判断,如果是2053年的就改成1953年,后面的性别一列保持原来的格式不变。这个可以VBA做到吗?
员工身份证.rar (4.07 KB, 下载次数: 21)

TA的精华主题

TA的得分主题

发表于 2013-10-5 18:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
一家大型跨国公司!   +   员工有几千人!   =   汇总身份证时发现有错误?

小伙伴们惊呆了!

TA的精华主题

TA的得分主题

发表于 2013-10-5 19:33 | 显示全部楼层
建议:1、问问那些国家的身份证的编码规则,看什么地方包含出生日期信息,分别提出来;
2、如果根据提出来的出生日期计算出的年龄太离谱(员工的年龄到今年怎么也应该有10岁吧?),就自动更正。

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-10-5 20:33 | 显示全部楼层
guzhen9315 发表于 2013-10-5 18:55
一家大型跨国公司!   +   员工有几千人!   =   汇总身份证时发现有错误?

小伙伴们惊呆了!

嗯,母公司是跨国公司,这个还是中国注册的公司。

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-10-5 20:36 | 显示全部楼层
lhdcxz 发表于 2013-10-5 19:33
建议:1、问问那些国家的身份证的编码规则,看什么地方包含出生日期信息,分别提出来;
2、如果根据提出来 ...

不用管它外国的身份证编号,有的还是录入的回乡证呢(以前的叫法,现在来往内地通行证吧),我的要求只要是把它的20**年变为19**年就行了,不用函数。

TA的精华主题

TA的得分主题

发表于 2013-10-5 20:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
>2000年,则-100年

TA的精华主题

TA的得分主题

发表于 2013-10-5 20:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
=IF(E2>36525,E2-36525,E2)

TA的精华主题

TA的得分主题

发表于 2013-10-5 20:54 | 显示全部楼层
Sub SSS()
    For i = 2 To Range("E65536").End(xlUp).Row
        If Cells(i, 5) > 36525 Then Cells(i, 5) = Cells(i, 5) - 36525
    Next
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-10-5 23:35 | 显示全部楼层
guzhen9315 发表于 2013-10-5 20:54
Sub SSS()
    For i = 2 To Range("E65536").End(xlUp).Row
        If Cells(i, 5) > 36525 Then Cells ...

不错,谢谢了。不过我的思路是对以前汇总的出生日期不放心,就想根据身份证号码来自动判断出出身日期,如够身份证号码是错的或者是港澳台外国的,就把出生日期是20**的改成19**就可以了,另外性别也按这个原则来判断。不知可行?不过,你的这个代码还是不错的了。

TA的精华主题

TA的得分主题

发表于 2013-10-6 09:06 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这么大的跨国公司,
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-19 16:27 , Processed in 0.051504 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表