Over at Daily Dose of Excel, Dick provided a solution to the problem of counting active entities (e.g. customers) within a given period. That is, we want to count a customer if their period of activity overlaps with the given period. The key to the solution is SUMPRODUCT.
An alternative solution, which is a bit more work, but is more flexible, is to write a custom VBA function to compare two periods: that is, start1-finish1 versus start2-finish2.
It is then easy to add an extra column:
PFirst and PLast specify the period of interest. The formula in D6 is:
You might be tempted to write [First] and [Last], rather than B6 and C6. Unfortunately the implicit intersection of formula row with a table column does not work with the custom function – the function gets arrays of values from the whole columns.
However, we could have the OVERLAPS formulas off to the right of the table, say in column H. The formula can then be:
(Yes, I should have given the table a meaningful name…)
The formula in D3 is just:
We can also use the OVERLAPS function to provide conditional formatting – here in column A (see screenshot above). The formula is exactly the same as in column D:
Finally, here’s the code for the function:
Public Function OVERLAPS(start1, finish1, start2, finish2) As Variant 'Does the period start1-finish1 overlap 'with the period start2-finish2? 'pre: start1 <= finish1 and start2 <= finish2 If IsDate(start1) And IsDate(finish1) And _ IsDate(start2) And IsDate(finish2) Then OVERLAPS = _ (start2 >= start1 And start2 <= finish1) Or _ (finish2 >= start1 And finish2 <= finish1) Else OVERLAPS = CVErr(2001) End If End Function
The error appears on the worksheet as a #VALUE, rather than a #N/A – I didn’t look into this deeply.