计算双倍病房时间

计算双倍病房时间

我妻子使用 Excel 来记录她团队的工作时间,但这都是手工工作。有没有办法让 Excel 计算出同一班次中有 2 人以上工作的情况?

棘手的是,人们的轮班开始时间不同,但有时会重叠。

数据如下所示(还有更多的员工,但这显示了总体布局):

在此处输入图片描述

答案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

示例的结果

相关内容