跳转至

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 等动态数组函数组合使用