Самая простая идея (также далеко от любой оптимизации или качества кода):
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
Результат для вашего примера