1秒合并1000个表!Excel大神绝不外传的7个HSTACK神操作
一、动态合并多表
场景:将多个表中行数相同但列位置不同的表横向合并。
公式:
=LET(X,HSTACK(Sheet1:Sheet3!A1:T5),FILTER(X,INDEX(X,1,)<>""))
解析:
自动合并不同工作表的列,结合 FILTER 过滤空行。
二、跨表关联数据
场景:根据ID横向关联多个表的详细信息。
公式:
=HSTACK(XLOOKUP(E3:E5,C2:C6,B2:B6),XLOOKUP(E3:E5,B9:B13,D9:D13),XLOOKUP(E3:E5,C2:C6,A2:A6))
解析:
XLOOKUP在多个表格中查找返回部门等信息,再用HSTACK合并多个结果,从而得到一个动态数组区域。
三、条件分列显示
场景:根据状态将数据拆分到不同列。
公式:
=IFNA(HSTACK(FILTER(B2:B9,A2:A9="A"),FILTER(B2:B9,A2:A9="B")),"")
解析:
用 FILTER筛选出部门A、部门B名单,再用HSTACK横向拼接成动态数组,IFNA处理无数据时的错误显示为空白""。
四、智能填充空缺
场景:合并列数不同的表时,自动填充占位符或默认值。
公式:
=LET(x,HSTACK(B2:B6,C9:C13),IF(x="","无数据",x))
解析:
HSTACK合并B2:B6、C9:C13数据区域,原数据区域单元格为空白的情况下,合并后会自动填充为0,与原始数据中的0产生混淆,用指定值填充空白避免产生这种问题。
五、动态生成工资条
场景:为每个员工生成横向扩展的工资明细条。
公式:
=BYROW(HSTACK(A4:A7,B3&":"&B4:B7,C3&":"&C4:C7,D3&":"&D4:D7),LAMBDA(a,TEXTJOIN(" |",,a)))
解析:
每列工资数据与工资类别连接后,HSTACK将所有数据横向拼接,作为BYROW的数组区域,逐行合并分隔符,从而实现将多列工资数据合并为单列明细(如 WPS1 |工资1:11 |工资2:22 |工资3:33)的效果。
六、横向拼接多个函数
场景:根据部门分类汇总求和、计算平均、最大值、最小值等。
公式:
=GROUPBY(A1:A9,B1:B9,HSTACK(SUM,AVERAGE,MAX,MIN),1,0)
解析:
GROUPBY第三参数用HSTACK横向拼接多个函数,可同时汇总出多个值。
七、VLOOKUP多行多列查找
场景:根据多个部门名称查找多列数据。
公式:
=LET(a,{"B";"D";"E"},REDUCE(a,{2;4},LAMBDA(X,Y,HSTACK(X,VLOOKUP(a,A2:D7,Y,0)))))
解析:
公式核心在于VLOOKUP({"B";"D";"E"},A2:D7,2,0),返回查找区域的第二列数据,如果直接把公式改为VLOOKUP({"B";"D";"E"},A2:D7,{2,4},0),不能实现多行多列查找;
结合REDUCE传递参数{2;4}作为VLOOKUP的第三参数,这样通过逐列查找的方式,再用HSTACK函数横向将初始值查找对象{"B";"D";"E"}与每次查找的结果拼接起来,从而实现了VLOOKUP第1、3参数均为多个值的多行多列查找。
实现的效果等同于:
=CHOOSECOLS(CHOOSEROWS(A2:D7,XMATCH(F4:F6,A2:A7)),XMATCH(F3:H3,A1:D1))
立即参与:评论区说出你的独门秘籍,让10万打工人受益!