2016-06-30 168 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