Есть ли способ считать из последнего условия х? - PullRequest
1 голос
/ 19 сентября 2019

У меня сложный набор данных, который может возвращать 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))

1 Ответ

1 голос
/ 19 сентября 2019
=ARRAYFORMULA(COUNTIF(INDIRECT("A"&
 MAX(IF((A2:A=0)*(A2:A<>""), ROW(A2:A)+1, ROW(A2)))&":A"), 1))

0


Демонстрация электронных таблиц

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...