В этом ответе предполагается, что вы не хотите просто повторять все метки элементов в сводной таблице из раскрывающегося списка «Макет отчета» на вкладке «Конструкция» инструментов сводной таблицы.
Формула для получения первого непустого значения в той же строке или над той же строкой, что и текущая ячейка из столбца 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
. Затем это дает вам первую формулу прямо в верхней части поста