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