Excel计算年龄(足岁)问题:Excel中datedif和VBA中的datediff函数介绍

您所在的位置:网站首页 年龄计算到天数的公式 Excel计算年龄(足岁)问题:Excel中datedif和VBA中的datediff函数介绍

Excel计算年龄(足岁)问题:Excel中datedif和VBA中的datediff函数介绍

2024-07-13 19:43| 来源: 网络整理| 查看: 265

1.Excel中的datedif函数

之前我通过身份证计算年龄时,都是取第7到10位,用当年的年份去减,得到一个年龄,这样不准确。后来,发现了datedif函数,注意,只有一个f。

函数语法:DATEDIF(start_date,end_date,unit)参数1:start_date,表示起始日期参数2:end_date,表示结束日期参数1和参数2可以是带引号的文本串(例如:"2014-1-1")、系列号或者其他公式或函数的结果参数3:unit为所需信息的返回时间单位代码。各代码含义如下:"y"返回时间段中的整年数"m”返回时间段中的整月数"d"返回时间段中的天数"md”参数1和2的天数之差,忽略年和月"ym“参数1和2的月数之差,忽略年和日"yd”参数1和2的天数之差,忽略年。按照月、日计算天数

演示如下:在C2单元格里写上如下内容:=DATEDIF(A2,B2,"y")

比如,要根据身份证号求实际年龄,则用下面的方法:

在B2单元格写下如下内容:=DATEDIF(MID(A2,7,4) & "/" & MID(A2,11,2) & "/" & MID(A2,13,2),NOW(),"y")

 如果觉得不够详细,就看微软的官方说明。DATEDIF 函数 (microsoft.com)

2.在VBA中使用datediff函数

注意是两个f。而且函数的定义不一样,如下:

语法

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

DateDiff 函数语法包括这些 命名参数:

Part说明interval必需。 表示用于计算 date1 和 date2 之间差异的时间间隔的 字符串表达式。date1、date2必需;Variant (Date)。 要在计算中使用的两个日期。firstdayofweek可选。 一个指定一周的第一天的常量。 如果未指定,则会假定为星期日。firstweekofyear可选。 一个指定一年的第一周的常量。 如果未指定,则会假定 1 月 1 日出现的那一周为第一周。

设置

interval 参数具有以下设置:

Setting说明yyyy年q季度m月y每年的某一日d天w工作日ww周h小时n分钟s秒

这些是从官方文档上找的,很费解。比如,"yyyy"表示间隔的是多少年,"y"表示某年中的一日,有的文档上又写的是一年中的天。测试如下:

通过立即窗口的第3句我们发现,跨年就算一年,哪怕只有一天。 

文档中也明确了这句话。

在将 12 月 31 日与随后一年中的 1 月 1 日相比时,“年”("yyyy") 的 DateDiff 会返回 1,即使仅过去一天时间。

微软的官方文档地址:DateDiff 函数 (Visual Basic for Applications) | Microsoft Docs

3.VBA求足岁的方法

通过上面第2点的说明,在VBA下面直接使用datediff来求足岁,是行不通的了。因此,定义如下的函数,解决这个问题。

Function Age(id As String) As Integer varBirthDate = Mid(id, 7, 4) & "/" & Mid(id, 11, 2) & "/" & Mid(id, 13, 2) If IsNull(varBirthDate) Then Age = 0: Exit Function varAge = DateDiff("yyyy", varBirthDate, Now) '为了解决跨年就是一岁的问题,判断今年的生日到没了。如果没到,则减1。 If Date < DateSerial(Year(Now), Month(varBirthDate), Day(varBirthDate)) Then varAge = varAge - 1 End If Age = CInt(varAge) End Function

使用效果如下:



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3