分享

疑难53 如何提取身份证号码中的出生日期并计算年龄

 L罗乐 2017-02-14

疑难53 如何提取身份证号码中的出生日期并计算年龄

如图3-15 所示,该表为某公司员工基本资料。如何使用VBA 提取身份证号码中的出生日期,并计算每个员工的年龄?


解决方案

利用VBA 中的Mid 函数分别获取出生年月日,并用DateSerial 函数将其转换为日期,然后用DateDiff 函数计算出生年月与当前日期间隔的年数。

步骤1 按组合键【Alt F11】打开VBE。

步骤2 选择菜单“插入”→“模块”,并输入以下代码:

  1. Sub 获取身份证中出生日期()  
  2. '变量声明  
  3. Dim RowN As Long '行号  
  4. Dim sIDNo As String '身份证号码  
  5. '循环遍历  
  6. For RowN = 2 To Cells(Rows.Count, 'A').End(xlUp).Row  
  7. '获取身份证号码  
  8. sIDNo = Cells(RowN, 'B').Value  
  9. '提取出生年月  
  10. Cells(RowN, 'C').Value = DateSerial _  
  11. (Mid(sIDNo, 7, 4), Mid(sIDNo, 11, 2), Mid(sIDNo,  
  12. 13, 2))  
  13. '使用DateDiff函数计算年龄(周岁)  
  14. Cells(RowN, 'D').Value = DateDiff('yyyy', Cells(RowN, 'C').Value,  
  15. Date)  
  16. Next  
  17. End Sub 

步骤3 返回工作表界面,在功能区的“开发工具”选项卡中单击【宏】按钮,执行“获取身份证中出生日期”宏后,即可得到出生日期以及年龄,如图3-16 所示。
 

原理说明

※DateDiff 函数※

DateDiff 函数可以计算两个日期之间的间隔,其语法为
 

  1. DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]]) 

其中,参数Interval 表示日期间隔以何种日期单位表示,可以为表3-5 中的任意常量。在DateDiff 函数中,若将interval 参数设置为“w”,将会计算间隔的星期数,而非天数。

如:当date1 为2013 年1 月1 日(星期二),而date2 为2013 年1 月7 日(星期一),这两个日期在自然日历中分布在两个星期。

参数Date1 和Date2 为进行计算的两个日期。一般地,应将Date1 设置为值较小的日期。此时,函数返回正数,反之,函数将返回小于或等于0 的数值。

参数firstdayofweek 表示以哪一天作为一周的开始,其值可以为表3-6 中的任意常量。当需要求两个日期之间相差的周数,即当interval 参数设置为“ww”时,该参数的设置将影响计算结果。如以下表达式中,date1 和date2 所表示的日期分别为星期三和星期四,由于firstdayofweek 设置为vbThursday(即将星期四作为一周的开始),因而VBA 认为date2 是新的一个星期的开始,因而得到date1 和date2 相差1 周。
 

  1. DateDiff('ww', DateSerial(2012, 11, 7), DateSerial(2012, 11, 8),  
  2. vbThursday) 

表3-6 DateDiff 函数的firstdayofweek 参数

参数firstweekofyear 表示以何种设置为标准表示每年的一周开始,其值可以为表3-7 中的任意常量。

表3-7 DateDiff 函数的firstweekofyear 参数
 

※DateDiff 函数中interval 参数“w”和“ww”的区别※

参数interval 设置为“w”或“ww”,均为求date1 和date2 间隔的周数。使用参数“w”和参数“ww”将会有以下区别:

当使用interval 参数为“w”,其将会计算以date1 作为1 周的第1 天,而计算date1 和date2之间包含的星期的数量而忽略firstdayofweek 的设置。而当interval 参数设置为“ww”时,则以参数firstdayofweek 的设置作为一周的开始,计算date1 和date2 之间的星期数。如:date1设置为2013 年1 月1 日(星期二),date2 设置为2013 年1 月7 日(星期一),参数firstdayofweek设置为vbSunday。当参数interval 为“w”时,VBA 将以星期二作为1 周的第1 天,由于至2013年1 月7 日未满1 周,因而返回0。而当参数interva 为“ww”时,VBA 则以星期天作为1 周的开始,2013 年1 月7 日认为是第2 个星期的开始,因而认定两个日期相差1 周,而返回1。

知识扩展

※VBA 的DateDiff 函数和工作表函数DateDif 的区别※

DateDiff 和DateDif 均是求两个日期间隔的函数,其主要有以下区别:

当date1 和date2 相差的时间间隔没有超过interval 所定义的时间间隔时,DateDiff 判断date1 和date2 是否属于不同的inteval 所定义的时间间隔,若不同,则认为有差异。而DateDif 函数则认为date1 和date2 相差为0。如:对date1 和date2 求年份间隔,若date1 和date2 分别为2012 年12 月31 日和2013 年1 月1 日时,由于其处在不同的年份,因而使用DateDiff 函数将返回1,而由于其间隔未满1 年,则DateDif 返回0。

两个函数计算间隔的个数和类型不同。DateDiff 可以计算相差的星期数、小时数、分、秒,而DateDif 无法计算。DateDif 可以忽略年份和月份,计算相差的月数或天数,而DateDiff 无法计算。
 

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多