罗伯特(Robert)喜欢从事家谱研究。有时,当他找到一个较老的墓地时,没有在墓碑上看到出生和死亡的日期,而是看到一个日期和一个年龄。例如,“出生:1801年1月18日,死于81岁,11个月,17天”或“年龄:93岁,8个月,22天,于1901年3月18日死亡”。罗伯特想知道是否有任何方法可以计算出当天的遗漏日期。

有一种方法可以执行此操作,但不涉及使用常规工作表函数。 Excel提供了丰富的工作表功能,可让您操作日期,而Excel的“基础日期”是1901年1月1日;这是计算所有日期的日期。 (您可以将基准日期更改为1904,但只能更改三年。提供此功能是为了与Mac上的Excel兼容。)这意味着可以将较早的日期(例如您在公墓中发现的用于家谱的日期)更改为不能直接在Excel中计算。

幸运的是,VBA没有此限制。这意味着您可以轻松创建用户定义的函数(宏),该函数将为您进行数学运算。首先放置开始日期(出生或死亡日期)

在单元格B1中。然后,在单元格B2:B4中输入您要调整开始日期的年数,月数和天数。因此,如果B1包含生日,则单元格B2:B4应该为正(您希望将它们添加到开始日期)。如果B1包含死亡日期,则B2:B4应该为负(您要从开始日期中减去它们)。

然后,创建此宏:

Function FindDate(Start As Date, iYrs As Integer, _   iMths As Integer, iDays As Integer)



Application.Volatile     Dim D As Date

D = DateAdd("yyyy", iYrs, Start)

D = DateAdd("m", iMths, D)

D = DateAdd("d", iDays, D)



FindDate = Format(D, "m/d/yyyy")

End Function

在要显示计算日期的任何单元格中,都可以输入以下公式:

=FindDate(B1,B2,B3,B4)

该函数的结果是一个格式化的日期,表示由指定的年,月和日调整的开始日期。因此,如果单元格B1包含1/18/1801,单元格B2包含81,单元格B3包含11,单元格B4包含17,则该函数将返回1/4/1883。同样,如果单元格B1包含3/18/1901,单元格B2包含-93,单元格B3包含-8,单元格B4包含-22,则返回的结果将是6/26/1807。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(5896)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本: