VBA中的DATEIFfunction

我有一个快速的问题。 有什么解决scheme可以在VBA中使用DATEDIFfunction。 这是Excel中的隐藏function。 我不是在最后用两个'F'来问DATEDIFF函数。 提前致谢。

您可以使用Evaluate方法…

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

是的,你可以使用variables…

 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 

这可能不是一个完全的答案,但是由于评论的时间太长,而且与你的用法有关,所以我会提交。

例如,我们有两个不同的date。 第一个是“2016-02-14”,第二个是“2016-03-10”。 DATEDIF(“20​​16-02-14”;“2016-03-10”;“ym”)和vba DATEDIFF(“m”,“”)返回0, 2016-02-14“,”2016-03-10“)

DateDiffDateDif在这个用法中给你两个不同的值的原因似乎是因为其中一个计算整个月份的差异,另一个计算月份本身的偏移而不关注date。

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返回两个月相隔多远的计数(二月和三月总是相隔一个月,因为它不关心你提供月份的DateDif ),而DateDif似乎计算了确定是否达到“完整”月份的天数。

  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 

结束function

“可能值得一玩