Libreoffice Calc Поиск MAX из подмножества результатов

У меня есть рабочая тетрадь Libreoffice Calc для отслеживания письма, в которой есть 3 листа. "Отслеживание времени", "Сводка времени" и "Статистика по годам". "Отслеживание времени" - это место, где вводятся пользовательские данные, "Сводка времени" - сводная таблица для "Отслеживания времени"; и "Годовая статистика" показывает долгосрочный прогресс.

Сводка по времени (запуск некоторых тестовых данных) выглядит примерно так:

       |Column A (Weeks)       | ... |Column M (Total Words)
-------+-----------------------+-----+----------------------
Row 7  |02/10/17 - 08/10/17    |     |3500
Row 8  |13/11/17 - 19/11/17    |     |2300
Row 9  |30/04/18 - 06/05/18    |     |1000
Row 10 |30/10/17 - 05/11/17    |     |700

Годовая статистика выглядит следующим образом:

       |A                   |B       |C
-------+--------------------+--------+----
Row 1  |                    |2017    |2018
Row 2  |Total Words         |6500    |1000
...
Row 7  |Max Words (Week)    |3500    |3500

Формула для "Годовой статистики".B7:C7 в настоящее время =MAX($'Time Summary'.$M$7:$M$10), но мне нужно изменить его для фильтрации по году в заголовке столбца.
https://ask.libreoffice.org/en/question/62260/minif-and-maxif-function-in-calc/ выглядело полезным, но когда я попробовал, MAX из формулы возвращал MAX для ROW - будучи 10 - вместо ROW, возвращающего позицию значения MAX - даже если кажется, что он работает в файле примера по ссылке.

Пример формулы:

=IFERROR(INDEX($Sheet1.$J$2:$J$13,MAX(ROW($Sheet1.$J$2:$J$13)*($Sheet1.$A$2:$A$13=A2))-1,1),NA())

Моя формула использует RIGHT() сравнить последние два символа заголовка столбца с двумя последними символами недели в $'Time Summary':$A$7:$A$10 и является:

=IFERROR(INDEX($'Time Summary'.$M$7:$M$10,MAX(ROW('Time Summary'.$M$7:$M$10)*(RIGHT($'Time Summary'.$A7:$A$10,2)=RIGHT(B1,2)))-6,1),NA())

Я, конечно же, не забыл нажимать CTRL+SHIFT+ENTER, как сказано в инструкциях, чтобы заставить работать массив в формуле.

Это и есть объяснение моей проблемы. Что я не так делаю?

1 ответ

Хорошо, это немного затянуто, но мне удалось решить проблему с помощью следующей формулы:

=IF(MAX(IF(RIGHT(INDIRECT(CONCATENATE("$'Time Summary'.$A7:$A$",COUNTIF($'Time Summary'.$A:$A,"<>''")+2)),2)=RIGHT(B1,2),INDIRECT(CONCATENATE("$'Time Summary'.$Q$",ROW(INDIRECT(CONCATENATE("$'Time Summary'.$Q7:$Q$",COUNTIF($'Time Summary'.$Q:$Q,"<>''")+5))))),0))>0,MAX(IF(RIGHT(INDIRECT(CONCATENATE("$'Time Summary'.$A$7:$A$",COUNTIF($'Time Summary'.$A:$A,"<>''")+2)),2)=RIGHT(B1,2),INDIRECT(CONCATENATE("'Time Summary'.$Q",ROW(INDIRECT(CONCATENATE("$'Time Summary'.$Q$7:$Q$",COUNTIF($'Time Summary'.$Q:$Q,"<>''")+5))))),0)),NA())

Это завернуто в IF это заменяет любой результат 0 на '#NA' (только для аккуратности вывода). Кроме того, правая половина указанных диапазонов использует вычисление, чтобы выяснить, где находится нижний ряд, не учитывая итоговое значение, так что это еще одна причина, по которой он настолько велик.

Другие вопросы по тегам