Как рассчитать время, прошедшее в Excel - PullRequest
0 голосов
/ 11 января 2019

enter image description here

Мне нужно рассчитать рабочие часы, прошедшие в MS Excel . Здесь у меня есть две даты, даты начала и окончания с соответствующими временами. В некоторых местах у меня может не быть даты окончания и времени. Рабочие часы - 7 утра EST - 17 вечера EST . Как я могу рассчитать количество рабочих часов, прошедших здесь? (Исключая выходные)

Попытка " = ЕСЛИ (ISBLANK (P2), (СЕТИ (O2, NOW ()) - 1) * (" 17:00 "-" 7:00 ") + IF (СЕТИ (NOW () , NOW ()), медиана (MOD (NOW (), 1), "17:00", "7:00"), "17:00") - медиана (NETWORKDAYS (O2, O2) MOD ( O2,1), "17:00", "7:00"), (ЧИСТРАБДНИ (О2, Р2) -1) * * 1 014 ( "17:00" - "7:00") + ЕСЛИ (ЧИСТРАБДНИ (Р2 , P2), медиана (MOD (P2,1), "17:00", "7:00"), "17:00") - медиана (NETWORKDAYS (O2, O2) * MOD (O2,1),» 17:00 "," 7:00 ")) ", здесь также необходимо исключить праздничные дни.

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Я верю, что этот 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

0 голосов
/ 11 января 2019

Вы можете разделить это на три составляющие (часть первого дня, полные рабочие дни, часть последнего дня)

Давайте начнем со средней части. Здесь вы можете использовать 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...