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