Здесь я делаю несколько предположений:
- что данные всегда сортируются по дате и идентификатору,
- что идентификатор не появляется снова после изменения идентификатора (например,10002 больше не появляется после идентификатора 10019),
f
всегда предшествует t
, а последний t
- это место, где требуется разница.
=IF(B2<>B3,IF(MIN(COUNTIFS(B:B,B2,D:D,"t"),COUNTIFS(B:B,B2,D:D,"f"))=0,0,MAXIFS($A:$A,$D:$D,"t",$B:$B,$B2)-MINIFS($A:$A,$D:$D,"f",$B:$B,$B2)),0)

MIN(COUNTIFS(B:B,B2,D:D,"t"),COUNTIFS(B:B,B2,D:D,"f"))=0
эта часть гарантирует, что в данных для расчета должны быть как минимум 1 t
и 1 f
.Если есть только f
, MAXIFS
вернет 0, а MINIFS
вернет дату f
, что приведет к большому отрицательному значению.
MAXIFS($A:$A,$D:$D,"t",$B:$B,$B2)-MINIFS($A:$A,$D:$D,"f",$B:$B,$B2)
дает разницу в днях.
IF(B2<>B3, ... , 0)
проверяет, не является ли следующий идентификатор другим, и если он такой же, просто укажите 0 (в противном случае разница в днях появится в каждой строке для идентификатора)
Если ваш Excel не поддерживает MINIFS
и MAXIFS
, вам придется использовать более длинную формулу массива (используйте Ctrl + Shift + Enter для правильного использования. Вы знаете, что сделали это правильно, если Excel поставил скобки вокруг формулы):
=IF(B2<>B3,IF(MIN(COUNTIFS(B:B,B2,D:D,"t"),COUNTIFS(B:B,B2,D:D,"f"))=0,0,MAX(IF(($D:$D="t")*($B:$B=$B2),$A:$A))-MIN(IF(($D:$D="f")*($B:$B=$B2),$A:$A))),0)

Послекомментарии, я понимаю, что я неправильно понял проблему.Вот новая формула, которая должна быть больше, чем вы ожидали:
=IF(D2="t",IF(COUNTIFS(B:B,B2,D:D,"t")=0,0,A2-SUMIFS($A:$A,$D:$D,"f",$B:$B,$B2)),0)
