Моя жена использует Excel, чтобы отслеживать рабочее время своей команды, но это все ручная работа. Есть ли способ позволить Excel вычислять, когда более двух человек работают в одну смену?

Хитрость заключается в том, что смена людей начинается в разные часы, но иногда пересекается.

Данные выглядят следующим образом (сотрудников гораздо больше, но это показывает общую схему):

1 ответ1

1

Самая простая идея (также далеко от любой оптимизации или качества кода):

1) предположим, что мы можем игнорировать короткий перерыв во время (например, 10:00-14:00, 14:15-18:00 совпадает с 10:00-18:00). Я делаю это в переменном смещении , беря первый и последний раз в ячейке (и удаляя двоеточие).

2) создать массив "минут" в день от 1 до 2400 (поэтому почти половина массива не используется вообще)

3) за каждую "минуту" подсчитайте, сколько человек работало

Мы добавляем 1 к началу смены - таким образом, мы не учитываем перекрытия границ (например, если "A" начинается, а "B" заканчивается в 12:00, это не будет перекрытием)

Function shiftOverlaps(r As Range) As Integer
    Dim shiftStart As Integer
    Dim shiftEnd As Integer
    Dim shift As String
    Dim wholeDay(1 To 2400) As Integer

    shiftOverlaps = 0        

    For Each c In r
        shift = Replace(Left(Trim(c.Value), 5) & " " & Right(Trim(c.Value), 5), ":", "")
        If shift <> " " Then
            shiftStart = Left(shift, 4) + 1
            shiftEnd = Right(shift, 4)
            For i = 1 To 2400
                If i >= shiftStart And i <= shiftEnd Then
                    wholeDay(i) = wholeDay(i) + 1
                    If wholeDay(i) > shiftOverlaps Then
                        shiftOverlaps = wholeDay(i)
                    End If
                End If
            Next i
        End If
    Next c

    shiftOverlaps = shiftOverlaps - 1

End Function

Результат для вашего примера

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .