如何计算Excel中经过的营业时间

时间:2019-01-11 09:26:36

标签: excel excel-formula

enter image description here

我需要计算在 MS Excel 中经过的工作时间。在这里,我有两个日期,分别是开始日期和结束日期。有些地方我可能没有结束日期和时间。 营业时间为美国东部标准时间上午7点至美国东部标准时间下午17点。如何计算这里的营业时间? (不包括周末)

尝试使用“ = IF(ISBLANK(P2),(NETWORKDAYS(O2,NOW())-1)*(“ 17:00”-“ 7:00”)+ IF(NETWORKDAYS(NOW() ,NOW()),MEDIAN(MOD(NOW(),1),“ 17:00”,“ 7:00”),“ 17:00”)-MEDIAN(NETWORKDAYS(O2,O2) MOD( O2,1),“ 17:00”,“ 7:00”),(NETWORKDAYS(O2,P2)-1)(“ 17:00”-“ 7:00”)+ IF(NETWORKDAYS( P2,P2),MEDIAN(MOD(P2,1),“ 17:00”,“ 7:00”),“ 17:00”)-MEDIAN(NETWORKDAYS(O2,O2)* MOD(O2,1), “ 17:00”,“ 7:00”))”也需要在此排除假期。

2 个答案:

答案 0 :(得分:1)

您可以将其分为三个部分(第一天的分数,整个工作日,最后一天的分数)

让我们从中间部分开始。在这里,您可以使用NETWORKDAYS并减去开始日期和结束日期。我假设A1中的开始日期和B1中的结束日期。为了排除假期,您需要在工作表中维护一个假期列表。该公式假定此列表在C1:C10范围内。由于您的工作日有10个小时,因此结果乘以10。

=MAX((NETWORKDAYS(A1,B1,C1:C10)-NETWORKDAYS(A1,A1,C1:C10)-NETWORKDAYS(B1,B1,C1:C10))*10,0)

对于小数部分,您需要确定一天本身是否是假期,我们再次使用NETWORKDAYS函数作为因子,该因子可以为0或1。现在,我们只需要确定该天要增加的小时数。根据您想要的粒度,您可以考虑数小时,数分钟甚至数秒钟。我将小时和分钟作为分数(分钟/ 60 =小时)。

第一天就可以得到

=MAX(17-MAX(HOUR(A1)+MINUTE(A1)/60,10),0)*NETWORKDAYS(A1,A1,C1:C10)

最后一天得到

=MAX(MIN(HOUR(B1)+MINUTE(B1)/60,17)-10,0)*NETWORKDAYS(B1,B1,C1:C10)

将所有内容放在一起可以使我们拥有:

=MAX(17-MAX(HOUR(A1)+MINUTE(A1)/60,10),0)*NETWORKDAYS(A1,A1,C1:C10)+MAX((NETWORKDAYS(A1,B1,C1:C10)-NETWORKDAYS(A1,A1,C1:C10)-NETWORKDAYS(B1,B1,C1:C10))*10,0)+MAX(MIN(HOUR(B1)+MINUTE(B1)/60,10)-10,0)*NETWORKDAYS(B1,B1,C1:C10)

答案 1 :(得分:0)

我相信这个UDF将满足您的需求。

它计算小时数并将其返回为浮点数,然后您需要将其乘以24来获得小时数。

Function workhours(startdate As Date, enddate As Date)

    Opentime = "7:00"
    Closetime = "17:00"

    Fulldays = Int(enddate - startdate) - 1

    DayOneHours = CDate(Year(startdate) & "-" & Month(startdate) & "-" & Day(startdate) & " " & Closetime) - startdate
    BeforeOpen = CDate(Year(startdate) & "-" & Month(startdate) & "-" & Day(startdate) & " " & Opentime) - startdate
    HoursDayOne = DayOneHours - BeforeOpen

    If enddate < CDate(Year(enddate) & "-" & Month(enddate) & "-" & Day(enddate) & " " & Opentime) Then
        HoursLastDay = 0
    Else
        HoursLastDay = enddate - CDate(Year(enddate) & "-" & Month(enddate) & "-" & Day(enddate) & " " & Opentime)
    End If

    workhours = Fulldays * (CDate(Closetime) - CDate(Opentime)) + HoursDayOne + HoursLastDay

End Function

在Excel中使用它,例如:

=workhours(A1,B1)*24

enter image description here