VBA中的Datedif函数

时间:2016-02-14 20:50:07

标签: excel vba excel-vba

我有一个简单的问题。有任何解决方案在VBA中使用DATEDIF功能。它是Excel中的隐藏功能。我不是在问最后两个'F'的DATEDIFF函数。 提前谢谢。

3 个答案:

答案 0 :(得分:1)

您可以使用Evaluate方法...

Evaluate("DATEDIF(A1,A2,""Y"")")

是的,你可以使用变量......

Sub TestEvaluateWithVariables()

    Dim strVariable As String
    Dim dateStartDate As Date
    Dim dateEndDate As Date

    dateStartDate = #9/1/2002#
    dateEndDate = #11/30/2003#

    strVariable = "DATEDIF(""" & dateStartDate & """,""" & dateEndDate & """,""YD"")"

    Cells(3, 3) = Evaluate(strVariable)

End Sub

答案 1 :(得分:0)

这可能不完全是一个答案,但由于评论时间过长而且与您的使用情况有些相关,我会提交。

  

Okey,例如我们有两个不同的日期。第一个是   “2016-02-14”,第二个是“2016-03-10”。 DateDif函数会   返回0,这是合适的结果,但DateDiff将返回1   而不是0. DATEDIF(“20​​16-02-14”;“2016-03-10”;“ym”)和vba   DATEDIFF(“m”,“2016-02-14”,“2016-03-10”)

DateDiffDateDif在这种用法中给出两个不同值的原因似乎是因为其中一个计算了完整的月份差异而另一个计算了月份的偏差而没有注意到日子。

DateDiff
https://msdn.microsoft.com/en-us/library/b5xbyt6f(v=vs.90).aspx

  

类似地,计算DateInterval.Month的返回值   纯粹来自论证的年和月部分

DateDif
https://msdn.microsoft.com/en-us/library/cc767548.aspx

  

“M”期间的完整月数。

我从中得出DateDiff返回两个月相隔多远的计数(2月和3月总是相隔1个月,因为它不关心你提供的月份的哪一天)DateDif似乎计算确定是否已达到“完整”月份的天数。

答案 2 :(得分:0)

    Function DateDif(D1 As Date, D2 As Date, DDS$) As Integer
Dim DHi As Date, DLow As Date
Dim DifS$: DifS = "DATEDIF(" & Chr(34)
Dim dCom: dCom = Chr(34) & "," & Chr(34)
Dim DEnd: DEnd = Chr(34) & ")"
If D2 < D1 Then
    DateDif = Evaluate(DifS & D2 & dCom & D1 & dCom & DDS & DEnd)
Else
    DateDif = Evaluate(DifS & D1 & dCom & D2 & dCom & DDS & DEnd)
End If

结束功能

'可能值得一玩