RSS订阅 爱办公,享无限效率

你现在的位置:

函数VSTACK/HSTACK合并多个数据区域

VSTACK 和 HSTACK 两个是强大的动态数组函数,用于合并多个数据区域。


VSTACK 函数详解

一、函数概述

VSTACK(Vertical Stack)用于将多个数组或单元格区域垂直堆叠(按行合并),即把多个数据表上下拼接成一个连续的数组 。

核心特性

  • 动态数组:结果自动溢出,数据更新时自动刷新
  • 多区域合并:最多可合并 254 个数组
  • 跨工作表:支持 3D 引用合并多表数据
  • 灵活容错:可处理列数不等的数组(缺失列显示 #N/A)

二、语法结构

=VSTACK(array1, [array2], ...)
参数必需说明
array1第一个要合并的数组或单元格区域
array2…第2到第254个要合并的数组或区域

三、VSTACK 关键特性

特性说明
行数计算总行数 = 所有源数组行数之和
列数计算总列数 = 源数组中最大列数
缺失值处理列数不足的数组,缺失位置显示 #N/A
空单元格源数组中的空单元格会转为 0
错误处理可用 IFERRORIFNA 替换错误值

四、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 错误数组维度不匹配时出现,建议用 IFERRORIFNA 处理
空单元格变 0VSTACK 会将空单元格转为 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, ...))

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注