Excel 2016:如何将多工作表指定列非空数据提取至主表
提取多工作表指定列非空数据到主表的解决方案
根据你的需求,分两种常见场景给出公式方案:
场景1:将所有工作表指定列的非空数据合并到主表同一列(汇总去重/不去重)
如果需要把T1、T2、T3等工作表指定列的非空值全部汇总到主表的Master Table列,可使用动态数组公式(适用于Excel 365/2021及以上版本):
- 不去重版本:
公式说明:用=VSTACK(FILTER(T1!ChoiceCol,T1!ChoiceCol<>""),FILTER(T2!ChoiceCol,T2!ChoiceCol<>""),FILTER(T3!ChoiceCol,T3!ChoiceCol<>""))FILTER筛选每个工作表指定列的非空数据,再用VSTACK将所有结果垂直堆叠,自动溢出到下方行。 - 去重版本(如果需要剔除重复值):
新增=UNIQUE(VSTACK(FILTER(T1!ChoiceCol,T1!ChoiceCol<>""),FILTER(T2!ChoiceCol,T2!ChoiceCol<>""),FILTER(T3!ChoiceCol,T3!ChoiceCol<>"")))UNIQUE函数对堆叠后的结果去重。
场景2:主表各列对应单个工作表的指定列,提取非空值
如果主表的T1ChoiceCol、T2ChoiceCol等列分别对应T1、T2等工作表的指定列,仅提取对应列的非空值,可使用以下方案:
动态数组版本(Excel 365/2021+)
在主表T1ChoiceCol列的第一个单元格(比如B2)输入:
=FILTER(T1!ChoiceCol,T1!ChoiceCol<>"")
公式会自动溢出所有非空值到下方行,空行自动留空。同理,在T2ChoiceCol列输入=FILTER(T2!ChoiceCol,T2!ChoiceCol<>""),以此类推。
兼容旧版Excel的公式(无动态数组)
在主表T1ChoiceCol列的B2单元格输入数组公式(输入后按Ctrl+Shift+Enter确认):
=IFERROR(INDEX(T1!ChoiceCol,SMALL(IF(T1!ChoiceCol<>"",ROW(T1!ChoiceCol)-ROW(T1!ChoiceCol$1)+1),ROWS($B$2:B2))),"")
然后下拉填充公式直到出现空值。该公式通过SMALL筛选非空行的位置,再用INDEX提取对应值,IFERROR处理超出非空行数时的错误,显示为空。
注意:将公式中的
ChoiceCol替换为你实际的列名或列范围(比如A:A),T1、T2替换为实际工作表名称。
内容的提问来源于stack exchange,提问作者BCOR
相关产品推荐
相关产品推荐

