HSTACK函数是WPS表格新增函数之一,是2023及以上版本才支持。它是将多个数组按水平方向(逐列)合并,返回一个新的动态数组。
语法:=HSTACK(数组1,[数组2],…)
参数:数组1, 数组2…(可直接引用单元格区域或嵌套函数生成的数组,最多支持254个参数)。
合并后数组的行数为所有参数中行数的最大值,行数不足的数组会用#N/A填充(可通过IFERROR处理)。支持动态数组扩展,源数据更新时结果自动刷新。
以上是HSTACK函数的语法和参数介绍,下面通过一些应用实例来进一步介绍它的具体应用。
1.基础用法
需求:将“门店”列和“销量”列横向合并为新表格。
数据示例:
公式:=HSTACK(A1:A15,C1:C15)
解释:横向堆叠两数据,即将(A1:A15,C1:C15)横向堆叠这两列数据。
公式:=HSTACK(TRIMRANGE(A:A),TRIMRANGE(C:C))
解释:通过TRIMRANGE函数提取有效数据,再进行横向堆叠。
需求:对数据列重新编排。
公式:=HSTACK(B2:B8,A2:A8,C2:D8)
解释:可以据需要的列顺序重新排列列顺序。
2.合并不同工作表的指定列
需求:将“Sheet1!A1:B5”的区域数据和“Sheet2、Sheet3”的“B1:B5”列合并。
数据示例:
公式:=HSTACK(Sheet1!A1:B5,Sheet2!B1:B5,Sheet3!B1:B5)
解释:将不同表格的数据区域横向堆叠合并。
3.与UNIQUE+SUMIFS嵌套生成动态汇总表
需求:对“门店”列去重后,横向合并“门店”和对应的“销售量总和”。
数据示例:
公式:=HSTACK(UNIQUE(A2:A15),SUMIF(A2:A15,UNIQUE(A2:A15),C2:C15))
解释:先用UNIQUE去重门店,再用SUMIF对应销售量求总和,完成后用HSTACK横向堆叠。
4.表格转换后横向堆叠
需求:将二维表转换为一维表。
数据示例:
公式:=HSTACK(TOCOL(IF(B2:D7<>”,A2:A7,1/0),3),TOCOL(B2:D7,3))
解释:
IF(B2:D7<>”, A2:A7, 1/0):作用:生成一个与 B2:D7 区域大小相同的数组。条件:B2:D7<>”,检查 B2:D7 每个单元格是否 非空。真值时:返回 A2:A7 对应行的值(即项目名称)。示例:若 B3 非空,则返回 A3(项目B)。假值时:返回 1/0(即错误值 #DIV/0!)。
TOCOL(…, 3):作用:将上一步的数组 转换为一列,并 忽略错误值。参数3表示:跳过所有错误值(#N/A、#DIV/0! 等)。

HSTACK(第一部分, 第二部分):作用:将两个单列数组 水平合并 成一个两列表格。第一列:来自 TOCOL(IF(…),3)(项目名称)。第二列:来自 TOCOL(B2:D7,3)(对应的值)。
5.统计重复出现资数
需求:将数据和出现次数形成一个数组。
数据示例:
公式:=HSTACK(UNIQUE(A2:A16),COUNTIF(A2:A16,UNIQUE(A2:A16)))
解释:UNIQUE(A2:A16):作用:提取区域 A2:A16中的唯一值(去除重复项)。COUNTIF(A2:A16, UNIQUE(A2:A16)):作用:针对UNIQUE返回的每个值,在 A2:A16中统计其出现次数。HSTACK(数组1, 数组2):作用:将 UNIQUE和COUNTIF 的结果水平堆叠成两列。
6.配合XLOOKUP实现多列数据查询
需求:根据“员工姓名”查询对应的“员工编号”“部门”“工资”三列信息。
数据示例:
公式:=XLOOKUP(F3,B3:B8,HSTACK(A3:A8,C3:D8),,0)
解释:利用HSTACK重新堆叠数组,作为XLOOKUP返回值。
7.配合SORT按指定列排序
需求:合并“姓名”和“工资”列,并按“工资”降序排序。
数据示例:
公式:=SORT(HSTACK(B2:B8,D2:D8),2,-1)
解释:HSTACK堆叠员工姓名和工资行列数,再利用SORT对工资列进行降序排序。(2表示按第2列排序,-1表示降序)
8.配合FILTER筛选后合并
需求:筛选“工资>3000”的员工,并合并其“员工编号”、“部门”和“工资”列。
数据示例:
公式:=FILTER(HSTACK(A3:A8,C3:D8),D3:D8>3000)
解释:HSTACK重组数组,再用FILTER筛选大于3000的结果。
9.处理不同长度数组(用IFERROR填充空白)
需求:合并“姓名”列(7行)和“部门”列(5行),缺失值用“-”填充。
数据示例:
公式:=IFERROR(HSTACK(A1:A7,C1:C5),’-‘)
解释:HSTACK堆叠行数不一致时,以最大行为基础,小于最大行数的列将以错误值(#N/A)填充,IFERROR将错误值进行替换。(原合并结果部门列第6-7行为#N/A,用IFERROR替换)
10.态生成带序号的标题行
需求:生成“序号+姓名+部门”的标题行,其中序号自动从1开始递增。
数据示例:
公式:=HSTACK(VSTACK(‘序号’,SEQUENCE(ROWS(A2:A7))),A1:A7,C1:C7)
解释:SEQUENCE生成序列号数组,HSTACK横向堆叠。
通过以上在WPS表格中的应用实例场景介绍,HSTACK函数可高效解决数据合并、动态汇总、跨表整合等问题,大幅减少手动操作并提升表格自动化程度。但需要注意的是#N/A错误处理:当合并数组行数不一致时,缺失行显示#N/A,可通过IFERROR(HSTACK(…), ‘缺失’)替换为指定文本。