ダブル病棟時間の計算

ダブル病棟時間の計算

妻はチームの労働時間を Excel で記録していますが、これはすべて手作業です。同じシフトで 2 人以上が働いている場合に Excel で計算する方法はありますか?

厄介なのは、人によってシフトの開始時間は異なるが、重なることもあることです。

データは次のようになります (従業員は他にもたくさんいますが、これは全体的なレイアウトを示しています)。

ここに画像の説明を入力してください

答え1

最も単純なアイデア(最適化やコード品質からは程遠い):

1) 10:00-14:00 14:15-18:00 の間の短い休憩を無視できると仮定します (例: 10:00-18:00 14:15-18:00 は 10:00-18:00 と同じです)。私はこれを変数で行いますシフトセル内の最初と最後の時間を取得します (コロンは削除します)。

2) 1 日から 2400 日までの「分」の配列を作成します (配列のほぼ半分はまったく使用されません)

3) 各「分」ごとに何人の人が働いていたかを計算する

シフト開始に 1 を追加します。これにより、境界の重複はカウントされません (たとえば、「A」が 12:00 に開始し、「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

例の結果

関連情報