Вспомогательная колонка сделает это проще. Посмотрим, сможем ли мы обойтись без этого.
Базовый подход
На самом деле мы вообще не собираемся использовать COUNTIF
, просто простой инкрементный счетчик.
Обратите внимание, что мы сделали вашу цель продаж динамической и определили ее в ячейке D1
. Оказывается, было бы немного проще иметь его в другом месте; поэтому, если вы следуете этим инструкциям, вы можете вместо этого поместить его в G1
и настроить все ссылки на ячейки $D$1
, следующие за $G$1
.
Эта формула работает
=IF(C2<$D$1,"dq",IF(AND(C1<$D$1,C2>=$D$1),1,D1+1))
=IF(C2<$D$1,"dq",
если текущая запись не соответствует требованиям, дисквалифицировать ее.
IF(AND(C1<$D$1,C2>=$D$1),1,
если текущая запись является первым последовательным классификатором (C1<$D$1
проверяет предыдущую запись на статус 'dq'; C2>=$D$1
проверяет текущую запись на квалификацию), сделайте ее значение равным 1
D1+1))
Иначе - то есть, если текущая запись не является ни дисквалифицированным итогом, ни первым квалифицированным итогом, сделайте ее значение на единицу больше, чем запись над ней.
Эта формула копирует вниз с D2
. Обратите внимание, что в этой точной настройке возникают проблемы, если первая запись (строка 2) является квалифицирующей записью, и вы используете D1
поскольку я должен определить цель, поскольку D1
выглядит как полоса 500. Есть несколько тривиальных способов обойти это; в целях примера, который я только что выбрал, чтобы указать, что первая запись не подходит, для простоты.
Отсюда должно быть довольно просто добавить следующую пару функций.
Добавить 'длинная полоса'
=MAX(INDIRECT("D2:D"&COUNTA(D:D)))
Здесь мы используем динамическую ссылку на ячейку, поэтому нам не нужно беспокоиться о расширении диапазона. Мы не можем использовать D:D
, опять же, потому что этот максимум вернется как 500 в D1
. Но вы можете просто написать =MAX($D$2:$D$9999)
или что угодно, если хотите. В любом случае использование INDIRECT
- это хорошая практика.
И затем, по-видимому, у вас есть идентифицирующая информация в A
и B
- возможно, дата, которую вы хотели бы связать с вашей «самой длинной полосой»?
Связанные данные
=INDEX(B:D,MATCH(G2,D:D,0),1)
Это простое INDEX
MATCH
чтобы найти (первый) экземпляр самой длинной достигнутой полосы, как вычислено в ячейке выше.
Ограничения
- Как я уже упоминал, поскольку мы не используем массивы или что-либо действительно сложное, в случае связей это возвращает первое появление полосы такой длины. Я бы назвал это функцией - ты не установил новый рекорд, пока не побил последний, верно?
- По той же причине этот подход не будет работать очень хорошо, если вы хотите знать, что и когда были n- ными длинными полосами для любых значений n больше 1. Ну, он может сказать вам , что эти полосы были - использовать
LARGE
для этого - но так как длина (п - -longest полосы , где п> 1), по определению, имели место более чем один раз, то поиск , который тянет на дате для этой серии не будет работать с этим подходом.
- Это требует, чтобы набор данных был таким, как показано / дано в вашем примере - очевидно, записи о продажах должны быть упорядочены по дате; возможно, более важно отметить, что он настроен только на работу с листом, содержащим данные для одного хранилища.