如何在VSTACK输出中仅移除连续空白值?
问题场景
此前我用以下公式合并多列并移除空值:
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 - 期望过滤后的输出:
1 2 <blank> 2 2 3 <blank> 3
核心需求是:仅保留「非空白值」或「空白但前一行非空白」的行,但不清楚如何在FILTER的include参数中引用VSTACK的临时合并结果。
解决方案
使用LET函数先存储VSTACK的合并结果(避免重复计算),再基于临时数组构建过滤逻辑:
LET( merged, VSTACK(<filtered_column_1>;<filtered_column_2>), row_ids, SEQUENCE(ROWS(merged)), FILTER(merged, merged<>"" OR (merged="" AND (row_ids=1 OR OFFSET(merged, -1, 0)<>"")) ) )
逻辑说明
LET(merged, ...):将VSTACK的合并结果赋值给merged变量,后续直接引用即可,无需重复编写VSTACK公式- 过滤条件拆解:
merged<>"":直接保留所有非空白值merged="" AND (row_ids=1 OR OFFSET(merged, -1, 0)<>""):仅保留两种空白行:- 第一行的空白(避免第一行空白被误过滤)
- 当前行是空白,但前一行非空白的行(即连续空白中的第一个空白,后续连续空白会被过滤)
适配调整
如果你的空白值实际是0而非空文本,只需把公式中的""替换为0即可。
内容的提问来源于stack exchange,提问作者HigoChumbo
相关产品推荐
相关产品推荐

