你现在的位置:
函数VSTACK/HSTACK合并多个数据区域
VSTACK 和 HSTACK 两个是强大的动态数组函数,用于合并多个数据区域。
VSTACK 函数详解
一、函数概述
VSTACK(Vertical Stack)用于将多个数组或单元格区域垂直堆叠(按行合并),即把多个数据表上下拼接成一个连续的数组 。
核心特性:
- ✅ 动态数组:结果自动溢出,数据更新时自动刷新
- ✅ 多区域合并:最多可合并 254 个数组
- ✅ 跨工作表:支持 3D 引用合并多表数据
- ✅ 灵活容错:可处理列数不等的数组(缺失列显示 #N/A)
二、语法结构
=VSTACK(array1, [array2], ...)
| 参数 | 必需 | 说明 |
|---|---|---|
| array1 | 是 | 第一个要合并的数组或单元格区域 |
| array2… | 否 | 第2到第254个要合并的数组或区域 |
三、VSTACK 关键特性
| 特性 | 说明 |
|---|---|
| 行数计算 | 总行数 = 所有源数组行数之和 |
| 列数计算 | 总列数 = 源数组中最大列数 |
| 缺失值处理 | 列数不足的数组,缺失位置显示 #N/A |
| 空单元格 | 源数组中的空单元格会转为 0 |
| 错误处理 | 可用 IFERROR 或 IFNA 替换错误值 |
四、VSTACK 实用示例
示例 1:基础垂直合并
场景:合并两个季度销售数据
=VSTACK(B6:E9, B12:E14)
- 将 Q1 数据(B6:E9)和 Q2 数据(B12:E14)上下堆叠
- 注意:Q2 区域不含表头,避免重复
示例 2:添加表头
场景:合并数据并保留表头
=VSTACK(A1:C1, A2:C4, A6:C9)
- 第一参数
A1:C1是表头 - 后续参数是数据区域
示例 3:处理列数不等(错误屏蔽)
场景:合并列数不同的表格,屏蔽错误值
=IFERROR(VSTACK(A1:D1, A2:E2, A3:C3), "")
- 第3个数组只有3列,第4列显示 #N/A
IFERROR将错误转为空字符串
示例 4:跨工作表合并(3D 引用)
场景:合并 1-12 月所有销售数据
=VSTACK('1月:12月'!A2:E21)
'1月:12月'!表示从”1月”到”12月”的所有工作表- 注意:按物理位置而非数字顺序,确保中间无其他表
或引用表格名称(更灵活):
=VSTACK(销售_2022, 销售_2023, 销售_2024)
- 表格自动扩展,新增数据自动包含
示例 5:合并后去重
场景:合并演员和导演列表,去除重复姓名
=UNIQUE(VSTACK(演员表[姓名], 导演表[姓名]))
- 先用 VSTACK 合并两个名单
- 再用 UNIQUE 去重
示例 6:筛选后合并(去除空行)
场景:合并多个表格并排除空行
=FILTER(
VSTACK(销售_20, 销售_21, 销售_22),
CHOOSECOLS(VSTACK(销售_20, 销售_21, 销售_22), 1) <> 0
)
- 先用 VSTACK 合并
- 再用 FILTER 排除第一列为 0(空行)的记录
示例 7:嵌套函数处理(添加序号列)
场景:在合并数据前添加自定义列
=VSTACK(
{"序号", "姓名", "销售额"},
HSTACK(
SEQUENCE(ROWS(A2:C10)),
A2:C10
)
)
- 用
SEQUENCE生成序号 - 用
HSTACK横向拼接序号列和数据 - 再用
VSTACK添加表头
HSTACK 函数详解
一、函数概述
HSTACK(Horizontal Stack)用于将多个数组或单元格区域水平堆叠(按列合并),即把多个数据表左右拼接成一个连续的数组 。
二、语法结构
=HSTACK(array1, [array2], ...)
参数与 VSTACK 相同,最多 254 个数组 。
三、HSTACK 关键特性
| 特性 | 说明 |
|---|---|
| 列数计算 | 总列数 = 所有源数组列数之和 |
| 行数计算 | 总行数 = 源数组中最大行数 |
| 缺失值处理 | 行数不足的数组,缺失位置显示 #N/A |
四、HSTACK 实用示例
示例 1:基础水平合并
场景:合并两个相关数据表
=HSTACK(B5:E12, H5:I12)
- 将左侧表格(B5:E12)和右侧表格(H5:I12)左右拼接
- 行数必须相同,否则出现 #N/A
示例 2:插入空白列
场景:合并时在两表之间插入空列
=HSTACK(A1:C4, "", E1:G4)
- 第二参数
""创建空白列作为间隔
示例 3:处理行数不等(错误屏蔽)
场景:合并行数不同的表格
=IFERROR(HSTACK(B5:E12, H5:I9), "")
- 第二个数组只有 5 行(H5:I9),第 6-8 行显示 #N/A
IFERROR屏蔽错误
示例 4:按条件对齐合并(解决行序不一致)
场景:两个表格行顺序不同,需按关键列对齐
=HSTACK(
B5:E12,
CHOOSEROWS(H5:I12, MATCH(B5:B12, G5:G12, 0))
)
- 用
MATCH查找左侧表格的 ID 在右侧表格的位置 - 用
CHOOSEROWS按匹配结果重新排列右侧表格行顺序 - 确保两表行对齐后再合并
示例 5:合并公式结果(动态数组拼接)
场景:将 UNIQUE 和 SUMIFS 结果合并为一个表格
=HSTACK(
UNIQUE(B3:B8),
SUMIFS(C3:C8, B3:B8, UNIQUE(B3:B8))
)
- 第一列:唯一部门列表
- 第二列:各部门销售额汇总
- 实现动态分类汇总表
示例 6:动态标题生成
场景:根据查询结果动态生成列标题
=HSTACK(
"查询零件",
"工艺" & SEQUENCE(, ROWS(FILTER(C3:C8, B3:B8=E3)))
)
- 根据筛选结果的行数,自动生成”工艺1″、”工艺2″…等标题
VSTACK 与 HSTACK 组合使用
示例:复杂报表构建
场景:构建带分类标签的汇总表
=IFERROR(
VSTACK(
HSTACK("业务部", B4:E4), ← 表头
HSTACK("业务一部", B5:E10), ← 分类1数据
HSTACK("业务二部", G5:J10), ← 分类2数据
HSTACK("业务三部", L5:O10) ← 分类3数据
),
""
)
- 先用
HSTACK给每个分类添加标签列 - 再用
VSTACK将所有分类数据垂直合并 - 最后用
IFERROR处理可能的错误
注意事项
| 注意点 | 说明 |
|---|---|
| 版本要求 | 仅 Excel 365、Excel 2021、Excel 网页版支持 |
| #N/A 错误 | 数组维度不匹配时出现,建议用 IFERROR 或 IFNA 处理 |
| 空单元格变 0 | VSTACK 会将空单元格转为 0,可用 IF 判断处理 |
| 3D 引用限制 | 跨表合并时,工作表必须物理相邻,且中间不能有其他表 |
| 性能优化 | 大数据量时避免整列引用,建议用具体范围(如 A2:A10000) |
推荐组合技巧
| 组合函数 | 用途 | 示例 |
|---|---|---|
| UNIQUE | 合并后去重 | =UNIQUE(VSTACK(表1, 表2)) |
| SORT | 合并后排序 | =SORT(VSTACK(表1, 表2), 3, -1) |
| FILTER | 合并后筛选 | =FILTER(VSTACK(...), 条件) |
| CHOOSEROWS/CHOOSECOLS | 选择特定行列 | =CHOOSECOLS(VSTACK(...), 1, 3, 5) |
| TEXTJOIN | 合并文本 | =TEXTJOIN(",", , VSTACK(...)) |
| LET | 简化复杂公式 | =LET(v, VSTACK(...), FILTER(v, ...)) |

发表回复