我有一个简单的问题。有任何解决方案在VBA中使用DATEDIF功能。它是Excel中的隐藏功能。我不是在问最后两个'F'的DATEDIFF函数。 提前谢谢。
答案 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(“2016-02-14”;“2016-03-10”;“ym”)和vba DATEDIFF(“m”,“2016-02-14”,“2016-03-10”)
DateDiff
和DateDif
在这种用法中给出两个不同值的原因似乎是因为其中一个计算了完整的月份差异而另一个计算了月份的偏差而没有注意到日子。
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
结束功能
'可能值得一玩