如何使用FILTER函数合并双区域筛选结果,无VBA实现Excel跨工作表提取数据
多区域筛选结果合并的无宏实现方案
适用Excel 365/网页版(推荐方案)
你可以直接用VSTACK函数垂直拼接两个FILTER的输出结果,即可得到连续的列表,公式自动溢出不需要手动下拉填充,完全不需要VBA/宏,适配浏览器端Excel运行要求。
写法1:分别筛选再拼接
修正你原有公式的语法问题后,拼接公式如下(如果你的Excel区域设置使用分号作为参数分隔符,把公式里的逗号替换为分号即可):
=VSTACK( IFERROR(FILTER(Sheet1!A1:B7, Sheet1!B1:B7>1, ""), {}), IFERROR(FILTER(Sheet1!A13:B20, Sheet1!B13:B20>1, ""), {}) )
IFERROR配合空数组{}的作用是避免某一筛选区域没有符合条件的行时,整个公式返回错误VSTACK会自动把两个筛选结果按顺序垂直拼接为连续的数组
写法2:合并区域后统一筛选
如果不想重复写筛选条件,可以先把两个目标区域合并为一个数组再统一筛选,写法更简洁:
=FILTER( VSTACK(Sheet1!A1:B7, Sheet1!A13:B20), INDEX(VSTACK(Sheet1!A1:B7, Sheet1!A13:B20), , 2) > 1, "" )
适配无动态数组的旧版Excel方案
如果需要兼容不支持FILTER/VSTACK的旧版Excel,可以用辅助列+数组公式实现:
- 新增辅助列,在辅助列第一行输入以下公式,按下
Ctrl+Shift+Enter启用数组公式计算,下拉填充到足够行数:
=IFERROR( SMALL(IF(Sheet1!B1:B7>1, ROW(Sheet1!A1:B7), 99999), ROW(A1)), SMALL(IF(Sheet1!B13:B20>1, ROW(Sheet1!A13:B20), 99999), ROW(A1)-SUMPRODUCT(--(Sheet1!B1:B7>1))) )
- 在要输出内容的第一列第一行输入公式,右拉到第二列后,一起下拉填充:
=IF(辅助列对应行单元格>99998, "", INDEX(Sheet1!A:A, 辅助列对应行单元格))
内容的提问来源于stack exchange,提问作者Christofer Weber
相关产品推荐
相关产品推荐

