EXCEL - формула для суммирования общего периода нескольких длительностей без дублирования перекрывающихся периодов времени. - PullRequest
0 голосов
/ 08 декабря 2018
Machine_ID  STARTDATE   ENDDATE
Machine 1   23-Apr-10   8-Jul-13
Machine 1   16-Jun-10   10-Jul-10
Machine 1   15-Aug-12   5-Oct-12
Machine 1   9-Jul-13    2-Jan-14
Machine 1   31-Dec-13   3-Jan-14
Machine 2   28-Mar-13   14-Apr-13
Machine 2   12-Jun-13   27-Jul-13
Machine 2   24-Jul-13   28-Oct-13
Machine 2   24-Oct-13   27-Oct-13

Я хочу рассчитать общее время на каждой машине без дублирования периодов времени.До сих пор эта формула массива (Ctrl + Shift + Enter) делает это отлично:

=SUM(--(COUNTIF(B$2:B$5,"<"&ROW(A:A))-COUNTIF(C$2:C$5,"<"&ROW(A:A))>0))

Но мне нужно настроить его, чтобы иметь возможность сделать это для каждой машины (есть сотни машин)

Я видел эту формулу, которая вычисляет для каждого (сначала вы заполняете строки с уникальными номерами машин, а затем он выполняет вычисления, но это только вычисляет времена перекрытия

=SUMPRODUCT(--($A$2:$A$36=$I2),--($C$2:$C$36>$B$3:$B$37),--($B$3:$B$37<>""), 
($C$2:$C$36-$B$3:$B$37)-($C$2:$C$36-$C$3:$C$37)*($C$2:$C$36>$C$3:$C$37)* 
($C$3:$C$37<>0))

Это столбец I

Machine 1
Machine 2
Machine 3

Спасибо!

1 Ответ

0 голосов
/ 08 декабря 2018

Используйте COUNTIFS и добавьте критерии для машины:

=SUMPRODUCT(--(COUNTIFS(B$2:B$10,"<"&ROW($A$35000:$A$60000),$A$2:$A$10,I1)-COUNTIFS(C$2:C$10,"<"&ROW($A$35000:$A$60000),$A$2:$A$10,I1)>0))

Я также ограничил количество строк для повторения.Формула будет повторяться от 28-Oct-1995 до 8-Apr-2064.Если этих дат недостаточно, измените номера строк, чтобы они соответствовали желаемым датам.

Использование полного столбца приведет к замедлению, поскольку каждая формула будет повторяться более 2 миллионов раз.они будут повторяться только 50000 раз для каждой формулы.

enter image description here


EDIT

Как объяснено выше, мы хотим ограничитьитерации.Эта формула автоматически ограничит итерации датами MIN и MAX.

=SUMPRODUCT(--(COUNTIFS(B$2:B$10,"<"&ROW(INDEX(A:A,MIN(B:C)-1):INDEX(A:A,MAX(B:C)+1)),$A$2:$A$10,I1)-COUNTIFS(C$2:C$10,"<"&ROW(INDEX(A:A,MIN(B:C)-1):INDEX(A:A,MAX(B:C)+1)),$A$2:$A$10,I1)>0))
...