2016-02-14 2 views
0

У меня есть быстрый вопрос. Есть ли решение использовать функцию DATEDIF в VBA. Это скрытая функция в Excel. Я не спрашиваю о функции DATEDIFF с двумя «F» в конце. Спасибо заранее.Функция Datedif в VBA

+0

Почему вы хотите использовать 'DateDif' вместо' DateDiff'? Они делают то же самое ... – ARich

+0

Не так ли? Если бы они были, я бы не стал задавать такие вопросы, как этот :( –

+0

Да, это так. Синтаксис отличается, но они делают то же самое. Так что опять же, почему вы хотите использовать [DateDif] (http: // www.techonthenet.com/excel/formulas/datedif.php) вместо [DateDiff] (http://www.techonthenet.com/excel/formulas/datediff.php)? – ARich

ответ

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 
+0

Bingo. Большое спасибо. –

+0

Могу ли я использовать его с переменными? –

+1

Мэтт - если этот ответ решает вашу проблему, вы должны отметить его как правильно, чтобы будущие люди с похожим вопросом определяли это как решение – Hambone

0

Это может быть не совсем ответ, но, видя, как он слишком длинный для комментария и по-прежнему имеет отношение к вашему использованию, я отправлю его.

Okey, например, у нас есть две разные даты. Первый - «2016-02-14», а второй - «2016-03-10». Функция DateDif будет return 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 возвращает количество, как далеко два месяца находится друг от друга (февраль и март всегда 1 месяц друга от друга, потому что не все равно, в какой день месяца вы входите в комплекте) в то время как DateDif, кажется, подсчитывает количество дней, чтобы определить, достигнут ли «полный» месяц или нет.

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 

End Function

'может быть стоит играть