We have call log
- Column A: Date of the call
- Column B: Time of the call
- Column C: Duration of the call
Following screen capture demonstrates the situation:
To solve the problem I implemented Visual Basic macro ConcurrentCalls() and helper functions max(), min() and isConcurrent(). Here is the code:
Function max(a, b)
  If a > b Then
    max = a
  Else
    max = b
  End If
End Function
Function min(a, b)
  If a > b Then
    min = b
  Else
    min = a
  End If
End Function
Function isConcurrent(start1, end1, start2, end2)
  If max(start1, start2) <= min(end1, end2) Then
    isConcurrent = True
  Els
    isConcurrent = False
  End If
End Function
Function ConcurrentCalls()
    maxconcurrent = 1
    r1 = 2
    Do
        concurrent = 1
        r2 = 2
        Do
            start1 = Cells(r1, 1).Value + Cells(r1, 2).Value
            end1 = start1 + Cells(r1, 3).Value
            start2 = Cells(r2, 1).Value + Cells(r2, 2).Value
            end2 = start2 + Cells(r2, 3).Value
            If r1 <> r2 And isConcurrent(start1, end1, start2, end2) Then
                concurrent = concurrent + 1
            End If
            r2 = r2 + 1
        Loop Until Cells(r2, 1) = ""
        maxconcurrent = max(maxconcurrent, concurrent)
        
    Loop Until Cells(r1, 1) <> ""
    ConcurrentCalls = maxconcurrent
End Function
Feel free to examine and let me know if you see a bug or can imagine a better solution!
Check also 101 Excel Secrets and Everyday Excel video course.

 
No comments:
Post a Comment