我错过的错误在哪里?

时间:2016-06-30 17:41:07

标签: excel-vba date-difference vba excel

如果当前年份尚未达到出生日期,则此Sub将无法正确计算。如果DOB是12/31/1950,它将DOB计算为56,但该人实际上是55,直到12/31。是否有我可以添加的更新以适应此目的。

user:references

2 个答案:

答案 0 :(得分:4)

如果您采用月份差异,将该数字除以12并截断

,该怎么办?
yrDiff = CInt(DateDiff("m", d2, d1) / 12)

甚至更准确地说,用小时做同样的事情

yrDiff = CInt(DateDiff("h", d2, d1) / 8766)

更新 CInt会围绕,而不是截断。在这里使用此功能

Public Function Trunc(ByVal value As Double, ByVal num As Integer) As Double
    Trunc = Int(value * (10 ^ num)) / (10 ^ num)
End Function

并称之为

yrDiff = Trunc(DateDiff("h", d2, d1) / 8766, 0)

答案 1 :(得分:0)

如果您比较同一个月/日以确定该日期是否已过,您将获得True或False。在VBA中,True为-1,False为0,因此您可以在日期已经过去时添加(通过减去)

Sub test()

    Dim d1 As Date, d2 As Date
    Dim yrDiff As Long

    d2 = #5/31/1950#
    d1 = #6/30/2016#

    yrDiff = Year(d1) - Year(d2) + CLng(d1 < DateSerial(Year(d1), Month(d2), Day(d2)))
    Debug.Print yrDiff

    d2 = #7/31/1950#

    yrDiff = Year(d1) - Year(d2) + CLng(d1 < DateSerial(Year(d1), Month(d2), Day(d2)))
    Debug.Print yrDiff

End Sub