2016-06-30 29 views
1

如果出生日期在当年还未被击中,则该小组计算不正确。如果DOB是12/31/1950,它将计算DOB为56,但这个人真的是55直到12/31。是否有可以添加的更新来适应此问题。我错过了什么错误?

Sub EE_DatedIf_ButtonC_() 

    Dim wb1 As Workbook 
    Dim i As Long 
    Dim LastRow1 As Long 
    Dim yrDiff As Long 
    Dim d1 As Date 
    Dim d2 As Date 

    Set wb1 = Workbooks("macro all client v.01.xlsm") 

    LastRow1 = wb1.Sheets("Carrier").range("F:F").Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 

    For i = 10 To LastRow1 

     d1 = wb1.Sheets("Carrier").Cells(8, 1) 

     d2 = wb1.Sheets("Carrier").Cells(i, 24) 

     yrDiff = DateDiff("yyyy", d2, d1) 

     wb1.Sheets("Carrier").Cells(i, 3) = yrDiff 

    Next i 

End Sub 

回答

4

如果你把月的差异数量,除以12这个数字,甚至更准确地截断

yrDiff = CInt(DateDiff("m", d2, d1)/12) 

,或者做同样的时间

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

UPDATECInt将轮,不截断。这里使用此功能

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

我日思365会更准确。更好的是,小时和8760 ... – TTT

+0

@TTT我会在我的答案中包括。谢谢。 –

+0

好的闰年调整。 :) – TTT

0

如果你比较同月/日,以确定是否该日期已过,你会得到一个真或假。在VBA真正为-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