Я пытаюсь построить VSTACK из динамического диапазона, используя REDUCE.
Что я получаю:
Что я хочу (обратите внимание, что значение XX игнорируется)
По сути, вопрос в том, как использовать условный HSTACK внутри LAMBDA внутри REDUCE. Здесь я хочу игнорировать ячейки со значением «XX» и создать динамическое разлив по HSTACK.
Я знаю, что мог бы просто использовать FILTER, но это всего лишь простой пример, где мне часто хочется выполнить более сложные условные изменения внутри сокращения в зависимости от значения ячейки, а затем HSTACK результатов (или игнорировать).
Я не понимаю, чем обусловлены значения #N/A.
HSTACK работает без условия, т.е. это работает (добавьте "%" и HSTACK):
Используйте FILTER()
и TOROW()
. Пытаться-
=TOROW(FILTER(A1:A100,(A1:A100<>"XX")*(A1:A100<>""))&"%")
У меня не получилось с ним работать REDUCE
; но вместо этого я использовал MAP с FILTER, возможно, этого будет достаточно для ваших будущих проектов:
=FILTER(MAP(A1:A7;LAMBDA(a;IF(a = "xx";"";a)));A1:A7<>"xx")
REDUCE
REDUCE
вы часто будете использовать ""
в качестве первого аргумента, а в простых требованиях, подобных вашему, столбец (или строку) в качестве второго аргумента. ""
даст фиктивный первый результат и его следует удалить с помощью DROP
.LAMBDA
я использую rr
и r
для столбца, поскольку я просматриваю строки (или cc
и c
для строки, поскольку я просматриваю столбцы).rr
представляет текущий сложенный результат, а r
представляет значение в текущей строке.rr
) как есть (перепишите rr
) — в противном случае складывайте rr
и r
по мере необходимости.=LET(data,A1:A6,exclude,"XX",suffix,"%",
DROP(REDUCE("",data,LAMBDA(rr,r,
IF(r=exclude,rr,HSTACK(rr,r&suffix)))),,1))
LAMBDA-готовность
В данном конкретном случае я заменю LET
на LAMBDA
и удалю все аргументы в первой строке:
=LAMBDA(data,exclude,suffix,
DROP(REDUCE("",data,LAMBDA(rr,r,
IF(r=exclude,rr,HSTACK(rr,r&suffix)))),,1))
Затем я воспользуюсь этой формулой в диспетчере имен и создам имя, например. StackColumnH
чтобы иметь возможность использовать эту функцию LAMBDA в любом месте книги:
=StackColumnH(A1:A6,"XX","&")
Более эффективные способы удовлетворения требований (вряд ли актуально)
MS365
=LET(data,A1:A6,exclude,"XX",suffix,"%",
TOROW(IFS(data<>exclude,data&suffix),2))
Эксель 2021
=LET(data,A1:A6,exclude,"XX",suffix,"%",
TRANSPOSE(FILTER(data&suffix,data<>exclude)))