实施 Máté Juhász 的建议

实施 Máté Juhász 的建议

在 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 的建议

将日期(作为字符串)放入单元格中A1A2。 在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) 非常容易安装和使用:

  1. ALT-F11 打开 VBE 窗口
  2. ALT-I ALT-M 打开新模块
  3. 粘贴内容并关闭 VBE 窗口

如果您保存工作簿,UDF 将随之保存。如果您使用的是 2003 之后的 Excel 版本,则必须将文件保存为 .xlsm 而不是 .xlsx

要删除 UDF:

  1. 调出如上所示的 VBE 窗口
  2. 清除代码
  3. 关闭 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 对我来说不起作用。

相关内容