ARTICLE · 1037717
Excel365 组合函数:筛选 + 自定义提取多字段,一步到位
Excel365 组合函数:筛选 + 自定义提取多字段,一步到位
业务场景 日常筛选数据,很多人习惯用【筛选】功能手动勾选条件。但每次数据源更新,都要重新操作,而且筛选出来的列,是原表完整字段,没办法直接只保留自己想要的几列。 365 动态数组 Excel,FILTER+HSTACK组合,先挑选需要的列,再按条件筛选,一条公式直接溢出结果,原始数据变更,结果自动刷新。 案例演示 数据源 A2:H10,包含人员姓名、籍贯、身高信息。 需求:提取【姓名、籍贯】两列,只保留身高小于 170的人员。 
公式 输入公式,自动溢出生成表格,一次性输出符合条件的姓名和籍贯。 
公式逐层拆解 逻辑顺序:先用 HSTACK 挑选列,再用 FILTER 按行过滤,输出的结果列完全由我们自定义。 传统写法对比 传统方案: 缺点: FILTER+HSTACK 优势: 拓展玩法 避坑要点 

01
02

03
=FILTER(HSTACK(A2:A10,E2:E10),H2:H10<170)
04
HSTACK(A2:A10,E2:E10)HSTACK 水平堆叠,把 A 列姓名、E 列籍贯拼接成新二维数组,只保留我们需要的字段,原表其他字段直接舍弃。 FILTER(待筛选数组,筛选条件)
第 1 参数:HSTACK 拼接好的二维数组 第 2 参数:H2:H10<170,筛选规则:身高小于 170
05
全表开启筛选,身高列设置条件 < 170; 复制筛选后的姓名、籍贯两列,粘贴到新区域。
新增、修改原始数据,筛选结果不会自动更新; 复制粘贴容易带错多余列; 频繁重复操作,报表自动化差。
单公式完成【选列 + 筛选】两步; 数据源改动,结果实时自动刷新; 想增减输出字段,直接在 HSTACK 内增删区域。
06
多条件筛选,身高 < 170,并且学历为大专
=FILTER(HSTACK(A2:A10,E2:E10), (H2:H10<170)*(B2:B10="大专"))搭配 TRIMRANGE,动态有效区域,避免整列引用卡顿
=FILTER(HSTACK(TRIMRANGE(A:A),TRIMRANGE(E:E)),TRIMRANGE(H:H)<170)07
仅 Microsoft365 动态数组版本支持,旧版 Excel 不支持 HSTACK、FILTER 溢出; HSTACK 里面所有区域,行数必须保持一致,否则数组错位; 公式输出区域不能存在其他文字,否则触发 #SPILL! 溢出报错; 筛选条件区域,行数要和 HSTACK 内区域行数对齐。
