在 Excel 2013 中,我需要创建公式来计算两个日期之间的年、月和天数,如果一个或两个日期是1900 年之前例如
:1896 年 5 月 20 日 - 2004 年 12 月 11 日 = 108 年,6 个月,21 天,
或 1757 年 7 月 19 日 - 1858 年 3 月 17 日 = 100 年,7 个月,26 天。
答案1
实施 Máté Juhász 的建议
将日期(作为字符串)放入单元格中A1和A2。 在B1进入:
=DATEVALUE(LEFT(A1,LEN(A1)-4) & RIGHT(A1,4)+2000)
并向下复制。然后在另一个单元格中输入Chip Pearson 的公式:
=DATEDIF(B2,B1,"y") & " years, " & DATEDIF(B2,B1,"ym") & " months, " & DATEDIF(B2,B1,"md") & " days"
要使用 VBA,请执行以下操作:
考虑以下用户定义函数(UDF):
Public Function ddif(d1 As Date, d2 As Date) As String
Dim years As Long, months As Long, days As Long
years = 0
months = 0
days = 0
year1 = Year(d1)
month1 = Month(d1)
day1 = Day(d1)
Do
If DateSerial(year1 + years, month1, day1) = d2 Then
GoTo finished
End If
If DateSerial(year1 + years, month1, day1) > d2 Then
years = years - 1
Exit Do
End If
years = years + 1
Loop
Do
If DateSerial(year1 + years, month1 + months, day1) = d2 Then
GoTo finished
End If
If DateSerial(year1 + years, month1 + months, day1) > d2 Then
months = months - 1
Exit Do
End If
months = months + 1
Loop
Do
If DateSerial(year1 + years, month1 + months, day1 + days) = d2 Then
GoTo finished
End If
days = days + 1
Loop
finished:
ddif = years & " " & months & " " & days
End Function
返回的年份、月份和日期之间将有一个空格。
用户定义函数 (UDF) 非常容易安装和使用:
- ALT-F11 打开 VBE 窗口
- ALT-I ALT-M 打开新模块
- 粘贴内容并关闭 VBE 窗口
如果您保存工作簿,UDF 将随之保存。如果您使用的是 2003 之后的 Excel 版本,则必须将文件保存为 .xlsm 而不是 .xlsx
要删除 UDF:
- 调出如上所示的 VBE 窗口
- 清除代码
- 关闭 VBE 窗口
要从 Excel 使用 UDF:
=我的函数(A1)
要了解有关宏的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
有关 UDF 的详细信息,请参阅:
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
必须启用宏才能使其工作!
答案2
非常感谢您的回复 Gary,我知道这是一个旧帖子,但请大家考虑这一点。
我花了很多时间在 Google 上搜索并尝试 VBA 代码,但无济于事,但这最终是在 VBA 中非常正确的方法,可以获取两个日期之间的年数、月数和天数,而不管 Excel 的 1900 年代以前的格式的问题。
通过这种方式,您可以轻松、简洁地知道正确的间隔,而无需近似值和带有双六分相的复杂线条,以及一个月中的天数变化。
抱歉回复迟了,但所有遇到 Excel 旧日期问题的人都应该看看这里,最终得到一些有效且精确的信息。谢谢。
请查看 VBA 代码,不幸的是 DATEVALUE 对我来说不起作用。