Excel时间论坛

我试图找出时间表上的进/出时间之差来计算工作时间。

我有以下数据:

----A----------B-----------C----------D------- ----Time In----Time Out----Time In----Time Out 1---11:15 AM---12:05 PM----1:05 PM----1:10 PM 2---1:05 PM----1:20 PM-----2:20 PM----4:00 PM 3---11:35 PM---12:05 AM----1:05 AM----1:30 AM 4---1:20 PM----2:20 PM------------------------ 

这些单元格全部格式化为时间(HH:MM AM / PM)

我使用下面的公式来计算工作时间:

 =(SUM(B1-A1)*24)+(SUM(D1-C1)*24) 

此公式会产生以下结果:

 ----A----------B-----------C----------D-----------E---------- ----Time In----Time Out----Time In----Time Out----TOTAL HOURS 1---11:15 AM---12:05 PM----1:05 PM----1:10 PM-----0.92------- 2---1:05 PM----1:20 PM-----2:20 PM----4:00 PM-----1.92------- 3---11:35 PM---12:05 AM----1:05 AM----1:30 AM-----(23.08)---- 4---1:20 PM----2:20 PM----------------------------1.00------- 

行1,2和4显示正确,但行3显示错误。 应该是.92不是-23.08。 我知道这是因为公式无法辨别列B(12:05 AM)在第二天。

不幸的是,添加date不是一个选项…只有时间。 可以写一个公式来解决这个限制吗?

以24为模的结果数,它应该总是给你一个正数。

你的等式变成:

 =MOD(SUM((B1-A1)*24),24) + MOD((SUM(D1-C1)*24),24) 

如果结果小于零,则添加24。

我为那些可能想知道的问题添加了一个VBA答案,因为这是一个很好的问题,而其他人可能会遇到这样的问题。 VBA更灵活,因为你可以有不同的格式,它仍然可以工作(例如你可以有实际的date)。 这利用duffymo的解决scheme。

 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为空,该function仍将正常运行。 另外请注意,我用秒,然后除以60,以确保精度不会丢失(这将是如果你“h”而不是“n”在DateDiff函数)。

而如果你只是想获得两个date/时间之间的小时数,你可以使用这个:

 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