目录
示例
实现代码
DateDiff函数
DateDiff函数中interval参数“w”和“WW”的区别
VBA的DateDiff函数和工作表函数DateDif的区别
示例
如图所示,该表为某公司员工基本资料。如何使用VBA提取身份证号码中的出生日期,并计算每个员工的年龄?
姓名身份证出生日期年龄高勤艳370403198802276625 强健的冬日410923197907150093 害怕的纸飞机341203198909054437 刘建芳321281198201184389 nxdcjl341124199005296821 精明的爆米花630104198805282530 精明的汽车320723198604283819 平淡的小笼包413027198310213251 奋斗的铅笔41142519860504152X 敏感的黑裤420602197912041047实现代码 Option ExplicitSub 获取身份证出生日期() Dim RowN As Long Dim sIDNo As String For RowN = 2 To Cells(Rows.Count, "A").End(xlUp).Row sIDNo = Cells(RowN, "B").Value '提取出生年月 Cells(RowN, "C").Value = DateSerial(Mid(sIDNo, 7, 4), Mid(sIDNo, 11, 2), Mid(sIDNo, 13, 2)) '计算年龄 Cells(RowN, "D").Value = DateDiff("yyyy", Cells(RowN, "C").Value, Date) NextEnd Sub DateDiff函数
DateDiff函数可以计算两个日期之间的间隔,其语法为
DateDiff(interval,date1,date2[,firstdayofweek[,firstweekofyear]) 其中,参数Interval表示日期间隔以何种日期单位表不,可以为表中的任意常量。在DateDiff函数中,若将interval参数设置为“w”,将会计算间隔的星期数,而非天数。
如:当date1为2013年1月1日(星期二),而date2为2013年1月7日(星期一),这两个日期在自然日历中分布在两个星期。
参数Date1和Date2为进行计算的两个日期。一般地,应将Datel设置为值较小的日期。此时,函数返回正数,反之,函数将返回小于或等于0的数值。
参数firstdayofweek表示以哪一天作为一周的开始,其值可以为表3-6中的任意常量。当需要求两个日期之间相差的周数,即当interval参数设置为“ww”时,该参数的设置将影响计算结果。如以下表达式中,date1和date2所表示的日期分别为星期三和星期四,由于firstdayofweek设置为vbThursday(即将星期四作为一周的开始),因而VBA认为date2是新的一个星期的开始,因而得到datel和date2相差1周。
DateDiff函数的firstdayofweek参数
常 置
值
说 明
vbUseSystem
0使用系统设置
vbSunday
1
星期天(默认)
vbMonday
2
星期一
vbTuesday
3
星期二
vbWednesday
4
星期三
vbThursday
5
星期四
vbFriday
6
星期五
vbSaturday
7
星期六
参数firstweekofyear表示以何种设置为标准表示每年的一周开始,其值可以为表中的任意常量。
DateDiff函数的firstweekofyear参数
常 量
值
说 明
vbUseSystem
0
使用系统设置
vbFirstjan1
1
1月1日所在的周为1年的第1周(默认)
vbFirstFourDays
2
第1个有4天在1周内的日期认为第1周
vbFirstFullWeek
3
第1个有7天在1周内的日期认为第1周
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均是求两个日期间隔的函数,其主要有以下区别:
当datel和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无法计算。