datedif求年龄_表格datedif函数怎么用

(49) 2024-08-10 13:01:01

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")

datedif求年龄_表格datedif函数怎么用 (https://mushiming.com/)  第1张

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

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

datedif求年龄_表格datedif函数怎么用 (https://mushiming.com/)  第2张

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

2.在VBA中使用datediff函数

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

语法

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

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

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

设置

interval 参数具有以下设置:

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

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

datedif求年龄_表格datedif函数怎么用 (https://mushiming.com/)  第3张

通过立即窗口的第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

使用效果如下:

datedif求年龄_表格datedif函数怎么用 (https://mushiming.com/)  第4张

THE END

发表回复