计算双重病房时间


0

我的妻子用Excel来记录她的团队的工作时间,但这都是手工工作。当两个以上的人在同一班次工作时,有没有办法让Excel计算?

棘手的是人们的转变在不同的时间开始,但有时会重叠。

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

enter image description here


2
您应该首先将每小时放在单独的单元格中,这样会更容易。
Hex

遗憾的是,这是由人力资源部门制作的。
Benjamin Diele

2
这很可能需要vba来拆分数据并将其标准化以便可以挖掘数据。
Scott Craner

是否可以使用Text to Columns,并使用空格作为分隔符来分割数据? (我希望新的行是由于文本换行,而不是单元格本身的新行字符)
BruceWayne

@BenjaminDiele为什么她不保留两组数据?我认为有可能有一个单独的表格与真实数据,这个自动生成(通过 =(cell&' '&cell & CHAR(10) & cell ...) - 其中CHAR(10)是换行符)
Hex

Answers:


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

您的示例的结果

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.