Excel 365 VSTACK / HSTACK 函数完全指南 — 垂直与水平数组合并之王
函数简介
VSTACK 和 HSTACK 是 Excel 365 新增的数组合并函数,可以将多个数组垂直堆叠(VSTACK)或水平并排(HSTACK)合并成一个数组。它们是处理多表数据汇总的神器,尤其适合将分散在不同区域的表头或数据合并在一起。
函数版本:Excel 365(Microsoft 365)及 Excel 2021 支持。Excel 2019 及更早版本 不支持。
语法结构
VSTACK — 垂直堆叠(上下合并)
=VSTACK(数组1,[数组2],[数组3],...)
将数组从上到下依次堆叠,返回一个垂直延伸的数组。
HSTACK — 水平并排(左右合并)
=HSTACK(数组1,[数组2],[数组3],...)
将数组从左到右依次并排,返回一个水平延伸的数组。
场景一:基础用法 — 两张表的垂直合并
VSTACK 最常见的场景:将两个或多个结构相同的表合并成一张。
数据:
-
表A(第1季度):张三 销售部 12000、李四 技术部 18000 -
表B(第2季度):王五 财务部 13000、赵六 技术部 14000
公式:
=VSTACK(A2:C4,E2:G4)
结果:自动将两个表上下合并成一列,6行×3列。
💡 相比传统的「复制粘贴」,VSTACK 公式是动态的,原表数据更新后合并结果自动刷新!
场景二:多表一键汇总(VSTACK 最强用法)
假设有12个月的数据,每月一张表,结构相同,用 VSTACK 一键合并:
=VSTACK('1月'!A2:D100,'2月'!A2:D100,'3月'!A2:D100,'4月'!A2:D100, '5月'!A2:D100,'6月'!A2:D100,'7月'!A2:D100,'8月'!A2:D100, '9月'!A2:D100,'10月'!A2:D100,'11月'!A2:D100,'12月'!A2:D100)
结果:12个月的数据瞬间合并成一整年的大表!
💡 配合 INDIRECT 和 SEQUENCE 可以做得更优雅:
=VSTACK(INDIRECT("'"&SEQUENCE(12)&"月'!A2:D100"))
场景三:合并不同结构的表(自动填充空值)
VSTACK 支持合并列数不同的表,缺失的列自动填充空值。
表A:员工号、姓名、部门(3列) 表B:员工号、姓名、部门、工资(4列)
=VSTACK(A2:C100,E2:H100)
结果:合并后列数自动对齐,表A的工资列自动显示为空值。
💡 如需指定填充值(而非空值),需要配合 IFERROR 和 IFNA 处理,或者用
IF(VSTACK(...)=0,"缺",VSTACK(...))方式处理。
场景四:HSTACK 横向合并 — 多列数据并排
当需要把不同来源的数据左右拼接时,HSTACK 是首选。
姓名列:张三、李四、王五 部门列:销售部、技术部、财务部 工资列:12000、18000、8000
公式:
=HSTACK(A2:A4,B2:B4,C2:C4)
结果:三列数据并排合并成一张三列的大表。
场景五:HSTACK 快速构建表头
HSTACK 的一个巧妙用法:动态生成表头。
=HSTACK("姓名","部门","工资","城市","入职年份")
结果:快速生成一个包含5个列标题的水平数组。
配合 VSTACK 可以动态构建整个表格结构:
=VSTACK(HSTACK("姓名","部门","工资"), A2:C100)
场景六:VSTACK + HSTACK 组合 — 二维数组合并
当有两个方向的数据需要合并时,VSTACK 和 HSTACK 可以嵌套使用。
原始数据:A列=姓名,B列=工资;C列=部门,D列=城市
需求:合并姓名+工资,然后在上方拼接表头。
=VSTACK(HSTACK("姓名","工资"), HSTACK(A2:A10, B2:B10))
结果:带表头的完整数据表!
场景七:与 FILTER 组合 — 筛选后合并
当只需要合并满足条件的行时,VSTACK + FILTER 是黄金组合:
=VSTACK( FILTER(销售部!A2:D100, 销售部!B2:B100="销售一部"), FILTER(销售部!A2:D100, 销售部!B2:B100="销售二部"), FILTER(销售部!A2:D100, 销售部!B2:B100="销售三部"))
结果:将三个销售部门的员工数据合并为一个汇总表!
场景八:与 UNIQUE 组合 — 去重后合并多表
合并多个表并自动去重:
=UNIQUE(VSTACK(表1!A2:A100,表2!A2:A100,表3!A2:A100))
结果:来自三个表的姓名去重合并,自动去掉重复项。
场景九:与 SORT 组合 — 合并后自动排序
=SORT(VSTACK(表A!A2:C50,表B!A2:C50)),3,-1)
结果:将两个表合并,然后按第3列降序排列。
场景十:自动追加合计行
在 VSTACK 合并的结果下方自动追加合计行:
=VSTACK(VSTACK(表A!A2:C20,表B!A2:C20),{"合计","",SUM(合并区域!C:C)})
结果:合并数据 + 合计行,一行公式搞定!
场景十一:HSTACK 快速创建对照表
将两列数据配对合并成一张对照表:
A列 = 员工姓名 B列 = 对应部门
=HSTACK(A2:A20,B2:B20)
效果:生成一张清晰的两列对照表,便于 VLOOKUP/XLOOKUP 引用。
场景十二:多表合并时自动添加来源标记
在合并多个表时,VSTACK 可以为每个表的数据添加来源标记列:
=VSTACK(HSTACK(表A!A2:C50,"表A"),HSTACK(表B!A2:C50,"表B"),HSTACK(C!A2:C50,"表C"))
结果:在最后一列自动标注每行数据的来源,方便后续分析。
场景十三:处理不规则区域
当每个表的行数不固定时,VSTACK 仍然能完美处理(空行自动忽略或填充):
=VSTACK(IF(表A!A2:A100="",NA(),表A!A2:D100),IF(表B!A2:A100="",NA(),表B!A2:D100))
配合 IF(...="",NA(),...) 处理空行,避免合并后出现大量空白行。
场景十四:动态汇总多Sheet数据(万能公式)
当你不确定有多少个 Sheet 需要合并时,用 LAMBDA + REDUCE 实现自动遍历:
=REDUCE("",SEQUENCE(12),LAMBDA(acc,n,IF(acc="",INDIRECT("'"&n&"月'!A2:D100"),VSTACK(acc, INDIRECT("'"&n&"月'!A2:D100")))))
结果:自动合并1月到12月的所有数据,无需手动指定每一个Sheet!
💡 这是 VSTACK 最进阶的用法之一,结合 LAMBDA 和 REDUCE 实现了自动化多表汇总。
场景十五:HSTACK 制作动态透视表列
配合 CHOOSECOLS 从不同方向提取数据:
=HSTACK(A2:A100,CHOOSECOLS(B2:D100,1,3),CHOOSECOLS(E2:G100,2))
从多个不连续区域按列索引提取并合并成一张宽表。
常见问题与注意事项
Q1:VSTACK / HSTACK 支持哪些 Excel 版本?
-
✅ Excel 365(Microsoft 365 订阅版)— 完全支持 -
✅ Excel 2021 — 支持 -
❌ Excel 2019 及更早版本 — 不支持 -
⚠️ WPS Office — 部分版本支持,需测试
Q2:VSTACK 合并时列数不一致会怎样?
自动对齐——列数少的表会自动填充空值。可以结合 IFERROR 或 IFNA 处理空值。
Q3:为什么出现 #SPILL! 错误?
合并结果溢出的区域被其他数据阻挡,清除阻挡单元格即可。
Q4:VSTACK 和 HSTACK 可以嵌套使用吗?
可以!VSTACK(HSTACK(...), HSTACK(...)) 是常见的二维合并模式。
Q5:合并后如何排序?
直接外套 SORT:=SORT(VSTACK(...), 列索引, 升降序)
Q6:和传统方法相比有什么优势?
-
传统方法:复制粘贴 → 静态,数据更新需重做 -
VSTACK/HSTACK:公式 → 动态,数据变化自动刷新
速查表
|
|
|
|
|---|---|---|
|
|
=VSTACK(表1!A2:D100, 表2!A2:D100) |
=HSTACK(A2:A10, B2:B10, C2:C10) |
|
|
=VSTACK(表1,表2,表3) |
=HSTACK(A:A,B:B,C:C) |
|
|
=VSTACK(HSTACK(表1,"表1"),HSTACK(表2,"表2")) |
=HSTACK(A2:A10,"部门", B2:B10) |
|
|
=SORT(VSTACK(...), 3,-1) |
|
|
|
=UNIQUE(VSTACK(...)) |
|
|
|
=VSTACK(FILTER(表1,...), FILTER(表2,...)) |
|
|
|
=VSTACK({"姓名","部门","工资"}, A2:C100) |
=HSTACK("姓名",A1:C1) |
|
|
=VSTACK(INDIRECT("'"&SEQUENCE(12)&"月'!A2:D100")) |
|
总结
VSTACK 和 HSTACK 是 Excel 365 最实用的新函数之一,核心优势:
-
动态合并:数据更新后结果自动刷新,无需重复操作 -
自动对齐:列数不一致时自动处理,无需手动补齐 -
可嵌套:VSTACK + HSTACK 实现二维数组合并 -
完美搭档:与 FILTER、UNIQUE、SORT、CHOOSECOLS 等函数无缝组合 -
LAMBDA 增强:配合 REDUCE + SEQUENCE 实现自动化多表汇总
掌握这对组合,让多表数据汇总变得前所未有的简单!
夜雨聆风