VSTACK 函数¶
函数概述¶
VSTACK 用于将多个区域或数组按行纵向堆叠,把后一个数组接在前一个数组的“下方”,返回一个新的动态数组结果。它常用于把多张表、多个分段数据合并为一张连续清单,尤其适合搭配动态数组函数做自动汇总。
适用场景示例:
- 合并多个月份的明细表为一张总表
- 把多段不连续数据拼成一个列表用于透视分析
- 将筛选/计算得到的多个结果集纵向汇总
基础语法¶
=VSTACK(array1,[array2],...)
参数说明¶
| 参数 | 是否必填 | 说明 |
|---|---|---|
| array1 | 必填 | 第一个要堆叠的数组/区域 |
| array2,... | 选填 | 追加堆叠的数组/区域,可多个 |
补充规则(理解结果形状很重要):
- 按行追加:array2 会接在 array1 的下方。
- 列数对齐:返回结果的列数取决于参与堆叠的数组;若列数不一致,Excel 会对缺失位置进行填充(通常表现为空白或错误值,取决于具体版本实现与数据类型)。
- 可混用来源:参数既可以是单元格区域,也可以是公式返回的数组(如 FILTER、CHOOSECOLS 的结果)。
基础用法示范¶
示例一 合并两表¶
需求:把“表A明细”和“表B明细”合并成一张总表。
数据源(示意):
| 表A字段 | 值 | 表B字段 | 值 | |
|---|---|---|---|---|
| 姓名 | 张三 | 姓名 | 赵六 | |
| 部门 | 销售 | 部门 | 市场 | |
| 金额 | 1200 | 金额 | 900 |
公式:
=VSTACK(表A明细,表B明细)
说明:
- 表B明细会追加到表A明细下方
- 合并后可直接作为动态数组溢出生成总表
示例二 叠加表头¶
需求:合并数据时只保留一行表头,并把多块明细接在表头下。
数据源(示意):
- 表头区域:H(例如:姓名、部门、金额)
- 明细区域1:D1
- 明细区域2:D2
公式:
=VSTACK(H, D1, D2)
说明:
- 把表头作为第一个数组传入
- 后面依次追加多段明细,形成“表头 + 多段数据”的完整清单
示例三 搭配筛选¶
需求:把两个部门的筛选结果合并为一个列表。
数据源(字段示意):
| 字段 | 说明 |
|---|---|
| 数据表[部门] | 部门列 |
| 数据表[金额] | 金额列 |
| 数据表[[姓名]:[金额]] | 从姓名到金额的二维区域 |
公式:
=VSTACK(FILTER(数据表[[姓名]:[金额]],数据表[部门]="销售"), FILTER(数据表[[姓名]:[金额]],数据表[部门]="市场"))
说明:
- FILTER 先各自返回一个动态数组结果
- VSTACK 再把两个结果按行合并
- 合并结果可继续用于 SORT、UNIQUE、PIVOT 等后续处理
示例四 与列选择配合¶
需求:合并时只取指定列(如“姓名、金额”)。
数据源(字段示意):
- 数据表包含:姓名、部门、日期、金额等多列
公式:
=VSTACK(CHOOSECOLS(表A,1,4), CHOOSECOLS(表B,1,4))
说明:
- CHOOSECOLS 先裁剪列,再堆叠
- 可确保两边列结构一致,便于汇总分析
总结¶
VSTACK 的核心价值是把多个数组或区域纵向拼接成一个动态数组,非常适合做自动化汇总与报表整合。日常使用中建议:
- 先统一各数据块的列结构(列名、列数、顺序)
- 需要“只保留一份表头”时,把表头单独作为 array1 传入
- 多结果集合并时,优先考虑与 FILTER、CHOOSECOLS、SORT、UNIQUE 等动态数组函数组合使用