У меня сложный набор данных, который может возвращать 3 разных условия на строку.Мне нужно иметь возможность подсчитать последние x строк, соответствующие одному из конкретных условий.
Следующая формула хорошо работает для меня, но я обнаружил сбой в одном случае этой формулы (формулаповторяется не менее десятка раз)
=ArrayFormula(LOOKUP(9.99999999999999E+307,IF(FREQUENCY(IF(AQ:AQ)=1,ROW(AQ:AQ)),IF(AQ:AQ<>1,ROW(AQ:AQ)))=0,FREQUENCY(IF(AQ:AQ=1,ROW(AQ:AQ)),IF(AQ:AQ=0,ROW(AQ:AQ))))))
Действующие критерии таковы:
0: Условие x выполнено - Сброс счетчика
1: Условие y выполнено - Счетчик приращений
2: Условие z выполнено - игнорировать эту строку
Поэтому это:
1
2
2
2
1
1
0
1
1
1
Должно выводиться: 3
Это:
1
2
0
2
2
1
2
1
Должен выдать: 2
Однако сбой, с которым я столкнулся, не сбрасывает счетчик, когда 0достигается, например:
1
2
1
2
1
1
2
2
2
2
0
Должен вывести: 0
Но на самом деле выводит: 4
Я проверил все возможные условия с этим конкретным набором данных и не могу устранить проблему.Я полагаю, что в формуле есть ошибка (в частности, 9.99999999999999E + 307), но я написал ее так давно, что не могу ее успешно отладить.Я пробовал 1E + 306, но результат тот же.
РЕДАКТИРОВАТЬ1: По запросу я включил в качестве сокращенной версии листа, как я могу при воссоздании проблемы.
https://docs.google.com/spreadsheets/d/1SOXiFMEQelqptBvjcabMZGNgG60TRRbe_b65rzT1bi0/edit?usp=sharing
Если вы прокрутите до конца листа, вы увидите, что Col AQ
имеет 0, в результате значение в ячейке AF2
должно быть 0
.
В листе вы заметите, что я использую именованные диапазоны.
РЕДАКТИРОВАТЬ2: ответ игрока0 был ИДЕАЛЬНЫМ !!<3 </p>
Я изменил новую формулу, чтобы адаптировать ее к своей электронной таблице, чтобы она могла вместить именованные диапазоны и раскрывающиеся списки.Этот вопрос мне очень помог с этим:
Преобразовать индекс столбца в соответствующую букву столбца
Окончательная формула (только для вашего FYI) оказалась:
=ARRAYFORMULA(COUNTIF(
INDIRECT(REGEXEXTRACT(ADDRESS(ROW(), column(INDIRECT($A$1 & Z$1 & "L"))), "[A-Z]+")&
MAX(IF((INDIRECT($A$1 & Z$1 & "L")=0)*(INDIRECT($A$1 & Z$1 & "L")<>""),
ROW(INDIRECT($A$1 & Z$1 & "L"))+1,5))&":"&
REGEXEXTRACT(ADDRESS(ROW(), column(INDIRECT($A$1 & Z$1 & "L"))), "[A-Z]+")), 1))