Я работаю в компании, которая занимается онлайн-чатом обслуживания клиентов. Каждый сотрудник может вести до двух чатов одновременно. Мне нужно найти общее количество времени, которое каждый сотрудник проводит в «двойных чатах» каждый день. Я намерен сделать это, суммируя время перекрытия для каждого чата. Однако, поскольку несколько чатов могут происходить одновременно, а длительность чата не ограничена, один длинный чат может перекрываться несколькими более короткими. Вот где я столкнулся с проблемой. Я нашел этот код, который находит перекрывающиеся часы:
Sub intersectHours()
Dim a As Long, i As Long, j As Long, rng As Range, ohrs As Double
With Worksheets("Sheet1")
For i = 2 To .Cells(Rows.Count, "E").End(xlUp).Row
ohrs = 0: Set rng = Nothing
For j = 2 To .Cells(Rows.Count, "E").End(xlUp).Row
If j <> i And Not Intersect(.Range(Hour(.Cells(i, "D").Value2) & ":" & Hour(.Cells(i, "E").Value2) - 1), _
.Range(Hour(.Cells(j, "D").Value2) & ":" & Hour(.Cells(j, "E").Value2) - 1)) Is Nothing Then
If rng Is Nothing Then
Set rng = Intersect(.Range(Hour(.Cells(i, "D").Value2) & ":" & Hour(.Cells(i, "E").Value2) - 1), _
.Range(Hour(.Cells(j, "D").Value2) & ":" & Hour(.Cells(j, "E").Value2) - 1))
Else
Set rng = Union(rng, Intersect(.Range(Hour(.Cells(i, "D").Value2) & ":" & Hour(.Cells(i, "E").Value2) - 1), _
.Range(Hour(.Cells(j, "D").Value2) & ":" & Hour(.Cells(j, "E").Value2) - 1)))
End If
End If
Next j
If Not rng Is Nothing Then
For a = 1 To rng.Areas.Count
ohrs = ohrs + TimeSerial(rng.Areas(a).Rows.Count, 0, 0)
Next a
End If
'.Cells(i, 6).NumberFormat = "[h]:mm:ss"
.Cells(i, 6) = ohrs
Next i
End With
End Sub
Однако мои данные представлены в формате ч:мм:сс, поэтому перекрывающийся вывод времени следует измерять в том же формате. Приведенный выше код выводит только часы, и я недостаточно знаю VBA, чтобы адаптировать его для своих целей. Любая помощь высоко ценится!