Извлечение «скрытых» данных из развертываемой / разворачивающейся сводной таблицы - Excel - PullRequest
0 голосов
/ 27 июня 2018

Я не уверен, возможно ли это, но, как вы можете видеть, у меня есть сводная таблица с несколькими зависимыми и расширяемыми полями. Я пытаюсь объединить данные из столбцов A: D в одну ячейку, которая отлично работает в строке 2, но не работает с пустыми родительскими ячейками, как вы можете видеть в столбце F.

Есть идеи, как этого добиться?

Сводная таблица

pivottable

1 Ответ

0 голосов
/ 27 июня 2018

В этом ответе предполагается, что вы не хотите просто повторять все метки элементов в сводной таблице из раскрывающегося списка «Макет отчета» на вкладке «Конструкция» инструментов сводной таблицы.

Формула для получения первого непустого значения в той же строке или над той же строкой, что и текущая ячейка из столбца B, может быть составлена ​​из комбинации AGGREGATE, SUMPRODUCT и OFFSET, например:

=OFFSET($B2,SUMPRODUCT(AGGREGATE(14,6,ROW($B$1:$B$100)*--(ROW($B$1:$B$100)<=ROW())*--(LEN($B$1:$B$100)>0),1))-ROW(),0)

Как это работает?

Начиная с самой внешней части, OFFSET($B2, VALUE, 0) - это начнется в ячейке B2, затем посмотрите вверх или вниз по VALUE строкам, чтобы получить значение.

Далее нам нужно знать сколько строк нам нужно будет посмотреть вверх или вниз. Теперь, если мы можем обработать самый нижний ряд с данными, мы можем вычесть текущий ROW() из этого, что даст нам OFFSET($B2, NON_BLANK-ROW(),0)

Итак, чтобы закончить, нам нужно выяснить, какие строки не являются пустыми И какие строки находятся над или над нашей текущей строкой, а затем взять наибольшую из них. Это займет ArrayFormula, но мы можем использовать SUMPRODUCT, чтобы сделать это правильно. Чтобы найти наибольшее число, мы можем использовать MAX или LARGE - но мы получим меньше ошибок, если выберем AGGREGATE(14,6,..,1). (14 означает «нам нужно k -ое наибольшее число», 6 означает «игнорировать значения ошибок», а 1 равно k - поэтому «мы» хочу наибольшее число, игнорируя ошибки ")

Но какой список чисел мы рассмотрим, я не слышу, как вы спрашиваете. Ну, мы хотим ROW для вывода из нашего диапазона (я использую $B$1:$B$100, потому что использование всего столбца B потребует far to long для многократного вычисления), сравнение с текущим ROW() и убедитесь, что LEN gth> 0. Эти два последних являются сравнениями, поэтому давайте сначала выпишем их:

ROW($B$1:$B100)<=ROW() 

и

LEN($B$1:$B$100)>0

Мы хотим использовать -- для преобразования TRUE и FALSE в 1 и 0 - это означает, что любые «плохие» значения становятся 0, а любые «хорошие» значения больше 0:

ROW($B$1:$B$100)*--(ROW($B$1:$B$100)<=ROW())*--(LEN($B$1:$B$100)>0)

Это дает нам номер строки, когда строка включена или находится перед текущей строкой, а столбец B не пустой - если любой из них имеет значение False, то вместо этого мы получаем 0. Отметьте это в AGGREGATE, чтобы найти наибольшее число:

AGGREGATE(14, 6, ROW($B$1:$B$100)*--(ROW($B$1:$B$100)<=ROW())*--(LEN($B$1:$B$100)>0), 1)

Затем поместите его в SUMPRODUCT, чтобы заставить Excel рассматривать его как ArrayFormula, и это ваше NON_BLANK. Затем это дает вам первую формулу прямо в верхней части поста

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