【问题标题】:How to calculate business hours elapsed in excel如何在excel中计算经过的营业时间
【发布时间】:2019-01-11 09:26:35
【问题描述】:

我需要在 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"))",这里也要排除节假日。

【问题讨论】:

  • 这在 VBA 中可能更容易
  • @Andreas 你能帮我一些代码/公式来获得这个吗?
  • 您想如何处理工作时间以外的工作?就像你的例子一样。
  • 营业时间是上午 7 点到晚上 17 点,因此可以说开始时间:01-10-2019 上午 7:00 和结束时间:01-11-2019 上午 8:00(如果结束时间是不可用,则应考虑当前时间),则总经过时间应为 11 小时(还应排除周末和节假日)。不幸的是,下面的解决方案没有帮助:(,如果你有一些解决方案或解决这个@RonRosenfeld的方法,真的很感激
  • 如果开始时间是凌晨 4 点,结束时间是下午 3 点怎么办?应该是 8 小时还是应该是 11 小时?

标签: excel excel-formula


【解决方案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)

【讨论】:

    【解决方案2】:

    我相信这个 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-07
      • 2020-11-18
      • 2013-05-28
      • 1970-01-01
      • 2021-08-16
      • 1970-01-01
      相关资源
      最近更新 更多