
답변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