Редактировать : Моим первоначальным предложением было " Рассчитать разницу в минутах, разделить на 60 и округлить частное до нуля десятичных знаков ".Тем не менее, @ Жан-Франсуа Корбетт показал мне ограничение этого подхода.
? DateDifferenceHour("07/23/2005 7:00:59 PM","07/23/2005 7:30:00 PM")
1
IOW моя первая попытка округлилась с продолжительностью от 29 минут и 1 секунды до 1 часа, что не очень хорошо.Поэтому вместо этого я предлагаю использовать разницу в секундах и делить ее на 3600.
Function DateDifferenceHour2(dateStart As Date, dateEnd As Date) As String
'Outputs Hours from two dates
DateDifferenceHour2 = _
Format(DateDiff("s", dateStart, dateEnd) / 3600, "0")
End Function
? DateDifferenceHour2("07/23/2005 7:00:59 PM","07/23/2005 7:30:00 PM")
0
Все еще остается вопрос о том, какой подход округления вы хотите.
Я выбрал Format (), думая, что вы захотите2,5 часа с округлением до 3.
Функция VBA Round () использует округление до четности, поэтому Round (2.5, 0) даст вам 2.
Мы не знаем, какиеты хочешь;Вы можете сказать нам.Кроме того, dateStart и dateEnd подразумевают, что dateStart не будет больше чем dateEnd.Однако, если это возможно, подумайте, как вы хотите, чтобы отрицательная продолжительность «округлялась» до ближайшего часа.Вот несколько примеров, скопированных из «Немедленного окна».
? Round(-2.5, 0)
-2
? Round(-1.5, 0)
-2
? Format(-2.5, "0")
-3
? Format(-1.5, "0")
-2