Как рассчитать разницу во времени в формате разницы в Excel, используя VBA - PullRequest
0 голосов
/ 30 октября 2019

У меня есть 2 столбца с датами в другом формате.

enter image description here

Как вы можете видеть, один столбец имеет формат дд / мм / гггг и другойв формате мм / дд / гггг.

Я хочу найти разницу во времени между ними. Кроме того, один столбец имеет формат даты, а другой - общий формат.

Я написал функцию в VB для вычисления разницы следующим образом:

 Function caclulateDifference(pDate1 As Date, pDate2 As Date) As Long

   TestDates = DateDiff("d", pDate1, pDate2)

 End Function

И я вызываю это в Excel, используя= caclulateDifference (b2, a2) Однако,

pDate1 поступает как 15.10.19 11:38:38, но pDate2 появляется как 19.10.15 9:09:23, а затем разницаприходит как 0.

Я хочу разницу в днях, часах и минутах. Что я делаю не так?

1 Ответ

0 голосов
/ 30 октября 2019

Вы получаете 0, потому что между этими значениями есть 0 дней, ПЛЮС, вы никогда не присваиваете функции значение, возвращающее что-либо кроме значения по умолчанию для Long.

Попробуйте это так:

 Function caclulateDifference(pDate1 As Date, pDate2 As Date) As Long

   caclulateDifference = DateDiff("d", pDate1, pDate2)

 End Function

Вы все равно получите 0, но в этом примере это то, что вы должны получить. Измените функцию на эту, а затем посмотрите в окне отладки, чтобы убедиться, что даты корректно форматируются:

Public Function caclulateDifference(pDate1 As Date, pDate2 As Date) As Long

   Debug.Print pDate1
   Debug.Print pDate2

   caclulateDifference = DateDiff("d", pDate1, pDate2)

 End Function

Затем протестируйте его, используя значения даты, которые находятся в разные дни, чтобы получить что-то отличное от 0.

Теперь, если вы хотите, чтобы это было более подробно, чем, как вы сказали, в днях, вам нужно вернуть значение, отличное от Long (может иметь миллисекунды в значениях тоже), и использовать другой аргумент в DateDiffнапример:

Public Function caclulateDifference(pDate1 As Date, pDate2 As Date) As Double

   caclulateDifference = DateDiff("s", pDate1, pDate2)

End Function

Затем преобразуйте количество секунд в число дней, часов, минут и секунд.

Преобразование секунд в дни, часы, минуты исекунд

Если вы не хотите, чтобы порядок имел значение, и всегда получали положительное число, используйте также функцию Abs (абсолютное значение), например:

Public Function caclulateDifference(pDate1 As Date, pDate2 As Date) As Double

   caclulateDifference = Abs(DateDiff("s", pDate1, pDate2))

End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...