Я пытаюсь рассчитать дни между списком дат начала и окончания минус любое совпадение.
Date A Date B Days taken
01/01/2018 01/01/2018 0
01/01/2018 05/01/2018 4
01/01/2018 10/01/2018 9
12/01/2018 15/01/2018 3
Total: 16
Total Days minus overlap: 12
Количество дней, необходимых для завершения проекта, составило 16 дней. Как только мы уберем 4 перекрывающихся дня, у нас останется 12.
Это простой пример. Я хотел бы определить общее количество дней за вычетом перекрытий за период 6-12 месяцев.
Изначально я попытался использовать формулу массива с комбинацией макросов для сортировки данных. Казалось, что сработало перекрытие, но это приводит к неправильным результатам.
=SUMPRODUCT(--($F$4:$F$234=R4),--($D$4:$D$234>$C$5:$C$235),--($C$5:$C$235<>""),($D$4:$D$234-$C$5:$C$235)-($D$4:$D$234-$D$5:$D$235)*($D$4:$D$234>$D$5:$D$235)*($D$5:$D$235<>0))
Затем я попробовал немного VBA (мои знания являются базовыми). Это работает каждую уникальную дату между датами. Но я не хочу, чтобы дата A была включена, например, как день;
Дата A: 01/01/2018
Дата B: 05/01/2018
Это должно составить 4 дня.
Option Explicit
Function UniqueDayCount(rStart As Range, rEnd As Range) As Long
Dim col As Collection
Dim vStart As Variant, vEnd As Variant
Dim I As Long, J As Long
vStart = rStart
vEnd = rEnd
On Error Resume Next
Set col = New Collection
For I = 1 To UBound(vStart)
For J = vStart(I, 1) To vEnd(I, 1)
col.Add Item:=J, Key:=CStr(J)
Next J
Next I
On Error GoTo 0
UniqueDayCount = col.Count
End Function