Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 6021|回复: 6

[已解决]求提取身份证号码中的出生年月日VBA

[复制链接]
发表于 2013-10-12 17:28 | 显示全部楼层 |阅读模式
本帖最后由 laicaiqian12 于 2013-10-14 09:46 编辑

求提取身份证号码中的出生年月日代码,要求:
1、弹出窗口要求输入身份证号所在列
2、弹出窗口要求数据出生日期将要生成到的列
3、身份证号码有15位和18位之分,我的测试附件只有18位的,但真正使用可能会有15位。
最佳答案
2013-10-12 18:16
  1. Sub test()
  2. Dim rngs As Range, arr()
  3. Top:
  4. Set rngs = Application.InputBox("请输入身份证号码所在的区域", "提示", , , , , , 8)
  5. If rngs.Columns.Count > 1 Then
  6.   MsgBox "只支持一列身份证号码的计算,请重新输入"
  7.   GoTo Top
  8. End If
  9. arr = Intersect(rngs, ActiveSheet.UsedRange)
  10. For i = 1 To UBound(arr)
  11.   Select Case Len(arr(i, 1))
  12.     Case 15
  13.       arr(i, 1) = Format("19" & Mid(arr(i, 1), 7, 6), "0000-00-00")
  14.     Case 18
  15.       arr(i, 1) = Format(Mid(arr(i, 1), 7, 8), "0000-00-00")
  16.     Case 0
  17.       arr(i, 1) = ""
  18.     Case Else
  19.       arr(i, 1) = "身份证号码有误"
  20.   End Select
  21. Next
  22. Set rngs = Application.InputBox("请选择生日的导出区域", "提示", , , , , , 8)
  23. rngs.Resize(UBound(arr)) = arr
  24. End Sub
复制代码

测试.rar

8.48 KB, 下载次数: 53

发表于 2013-10-12 17:36 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2013-10-12 17:39 | 显示全部楼层
那么的帅 发表于 2013-10-12 17:36
提供数据附件,并提供测试数据

已经添加测试附件,感谢您的关注。
回复

使用道具 举报

发表于 2013-10-12 17:55 | 显示全部楼层
laicaiqian12 发表于 2013-10-12 17:39
已经添加测试附件,感谢您的关注。

要生成到的列
结果做出几个实例
回复

使用道具 举报

发表于 2013-10-12 18:16 | 显示全部楼层    本楼为最佳答案   
  1. Sub test()
  2. Dim rngs As Range, arr()
  3. Top:
  4. Set rngs = Application.InputBox("请输入身份证号码所在的区域", "提示", , , , , , 8)
  5. If rngs.Columns.Count > 1 Then
  6.   MsgBox "只支持一列身份证号码的计算,请重新输入"
  7.   GoTo Top
  8. End If
  9. arr = Intersect(rngs, ActiveSheet.UsedRange)
  10. For i = 1 To UBound(arr)
  11.   Select Case Len(arr(i, 1))
  12.     Case 15
  13.       arr(i, 1) = Format("19" & Mid(arr(i, 1), 7, 6), "0000-00-00")
  14.     Case 18
  15.       arr(i, 1) = Format(Mid(arr(i, 1), 7, 8), "0000-00-00")
  16.     Case 0
  17.       arr(i, 1) = ""
  18.     Case Else
  19.       arr(i, 1) = "身份证号码有误"
  20.   End Select
  21. Next
  22. Set rngs = Application.InputBox("请选择生日的导出区域", "提示", , , , , , 8)
  23. rngs.Resize(UBound(arr)) = arr
  24. End Sub
复制代码

评分

参与人数 1 +5 金币 +10 收起 理由
suye1010 + 5 + 10 很给力!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2013-10-14 09:29 | 显示全部楼层
本帖最后由 laicaiqian12 于 2013-10-14 09:30 编辑
xdragon 发表于 2013-10-12 18:16

大湿,为何我生成的身日列标题名称是“省份证号码有误”呢?

姓名
身份证号码
手机
身份证号码有误
王晓恒
410422199012107014
13525356802
1990-12-10
王璐瑶
410422199301121023
13525359666
1993-1-12
兰明言
410422198208022253
13525359666
1982-8-2
王家明
410422199305104327
13525360519
1993-5-10
石建业
410422199003143339
13525372157
1990-3-14
李艳艳
41042219900408334X
13525375750
1990-4-8
刘振亚
410422199202054339
13525376175
1992-2-5
袁雪丽
410185198811044026
13525383394
1988-11-4
赵根水
410422199211108132
13525384551
1992-11-10
徐朋飞
410422199112277010
13525384692
1991-12-27
贾亚锋
410422199203023390
13525384692
1992-3-2
张小飞
410422199012217037
13525384932
1990-12-21

点评

“大湿“两字用得妙  发表于 2013-10-15 03:02
回复

使用道具 举报

发表于 2013-10-14 09:43 | 显示全部楼层
arr(i, 1) = "身份证号码有误"

是这句语句造成的  因为这个不是身份证号码么,如果不需要你可以删了
  1. 18.    Case Else

  2. 19.      arr(i, 1) = "身份证号码有误"

复制代码
这两行代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-27 06:10 , Processed in 0.513020 second(s), 19 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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