Я добавляю ответ VBA для тех, кто хочет знать, так как это хороший вопрос, с которым могут столкнуться другие люди. VBA более гибок в том, что у вас могут быть разные форматы времени, и он все равно будет работать (например, у вас могут быть фактические даты, включенные во время). Это использует решение от duffymo.
Function HoursWorked(t1 As Date, t2 As Date, _
t3 As Date, t4 As Date) As Double
Application.ScreenUpdating = False
Dim shift1 As Double
Dim shift2 As Double
shift1 = DateDiff("n", t1, t2) / 60
If shift1 < 0 Then
shift1 = shift1 + 24
End If
shift2 = DateDiff("n", t3, t4) / 60
If shift2 < 0 Then
shift2 = shift2 + 24
End If
HoursWorked = shift1 + shift2
Application.ScreenUpdating = True
End Function
Обратите внимание, что если смены 3 и 4 не заполнены, функция все равно будет работать нормально. Также обратите внимание, что я использовал секунды, затем разделенные на 60, чтобы гарантировать, что точность не будет потеряна (что было бы, если бы вы использовали «h» вместо «n» в функции DateDiff).
И если вы просто хотите узнать количество часов между двумя датами / временем, вы можете использовать это:
Function HoursDiff(ByVal date1 As Date, _
ByVal date2 As Date) As Double
Application.ScreenUpdating = False
Dim result As Double
result = DateDiff("n", date1, date2) / 60
If result < 0 Then
result = result + 24
End If
HoursDiff = result
Application.ScreenUpdating = True
End Function