Я часто использую столбцы VSTACK и удаляю пустые результаты с помощью FILTER следующим образом:
FILTER(VSTACK(<filtered_column_1>;<filtered_column_2>);
VSTACK(<filtered_column_1>;<filtered_column_2>)<>0)
Но я столкнулся со случаем, когда мне действительно хотелось сохранить непоследовательные пробелы.
Нефильтрованный вывод VSTACK:
1
2
<blank>
<blank>
<blank>
2
2
3
<blank>
3
Желаемый отфильтрованный вывод VSTACK:
1
2
<blank>
2
2
3
<blank>
3
Технически должно быть легко сравнить каждое значение с предыдущим, но моя проблема в том, что я не знаю, как ссылаться на выходные столбцы VSTACK для сравнения в аргументе FILTER "include", особенно учитывая столбцы, которые я подаю в качестве аргументов. в VSTACK — это не столбцы, на которые можно ссылаться, а скорее сами отфильтрованные столбцы.
FILTER(VSTACK(<filtered_column_1>;<filtered_column_2>);
<what do I do here in the "include" argument?>)
Есть идеи?
Да, я могу удалить их с помощью других формул. Я удалю это для ясности.
Попробуйте мой ответ, пожалуйста.
Вы можете сделать что-то вроде: =LET(d;VSTACK(<filtered_column_1>;<filtered_column_2>);crit;VSTACK(TAKE(d;1)<>"";(DROP(d;1)<>"")+(DROP(d;-1)<>""));FILTER(d;crit))
Попробуйте следующую формулу:
=LET(x,VSTACK("",1,2,"","","",2,2,3,""),
z,MAP(SEQUENCE(ROWS(x)),LAMBDA(y,IF(AND(INDEX(x,y) = "",INDEX(x,y-1) = ""),FALSE,TRUE))),
FILTER(x,z))
Замените VSTACK("",1,2,"","","",2,2,3,"")
на свою формулу VSTACK()
.
Работает! Спасибо! Даже не знал, что в Excel есть функция MAP. Кажется, он работает только для выходных данных VSTACK с одним столбцом, но я адаптирую его оттуда. Спасибо!
=LET(fc,A2:A11,sc,C2:C11,
st,VSTACK(fc,sc),
d,IF(st = "","",st),
dn,d = "",
ds,VSTACK(FALSE,DROP(dn,-1)),
r,FILTER(d,dn*ds=0),
r)
Если вам не нужен шаг d
(чтобы пробелы не отображались как нули), вставьте формулу st
в d
и удалите st
.
Замените самую нижнюю r
любой другой переменной, чтобы увидеть, что она содержит.
Вы можете создать функцию Lambda в диспетчере имен, например. RemoveCB
по следующей формуле:
=LAMBDA(array,LET(dn,array = "",FILTER(array,dn*VSTACK(FALSE,DROP(dn,-1))=0)))
Затем вы можете использовать его в своем сложенном столбце, например. H2#
(на скриншоте) по следующей формуле:
=RemoveCB(H2#)
Что-то вроде:
=FILTER(<arr>,SCAN(0,<arr> = "",LAMBDA(x,y,(x+y)*y))<2)
Складывание ради удовольствия, аналогично логике JvdV,
=LET(
data, A1:B10,
stacked, VSTACK(INDEX(data, , 1), INDEX(data, , 2)),
filtered, FILTER(
stacked,
LEN(TRIM(stacked & VSTACK(DROP(stacked, 1), "")))
),
IF(LEN(filtered), filtered, "")
)
Тогда первый и последний
<Blank>
должны оставаться на выходе. Они не последовательные.