Excel中表格区域如何进行拼接?VSTACK / HSTACK · 数据堆叠积木大师
- 2026-09-22 06:24:51
📦 12 Parts + Conclusion
👉 滑动
PART 01
VSTACK/HSTACK 是什么
WHAT IS IT
PART 02
基础语法
SYNTAX
PART 03
VSTACK 纵向堆叠
VERTICAL
PART 04
HSTACK 横向拼接
HORIZONTAL
PART 05
行列不匹配处理
MISMATCH
PART 06
跨表/跨簿合并
CROSS SHEET
PART 07
组合技黄金搭档
COMBO
PART 08
多表合并实战
CASE STUDY
PART 09
常见错误
TROUBLESHOOT
PART 10
练习题
EXERCISES
PART 11
下期预告
NEXT ISSUE
PART ///
速查卡
CHEAT SHEET
PART ///
速查卡
CHEAT SHEET
01
PART
VSTACK/HSTACK 是什么
WHAT IS IT
Excel中的VSTACK和HSTACK函数,就像两位“数据积木大师”!它们属于Excel动态数组函数家族,专门负责将多个数据区域合并成一个更大的数组。
与手动复制粘贴不同,这两个函数是“非破坏性”的——原数据丝毫不动,只返回一个合并后的新数组。源数据一变,结果自动跟着变!
通俗理解
VSTACK像叠罗汉:把多个表格从上到下摞起来,总行数是各表行数之和,列数取最大
HSTACK像拼积木:把多个表格从左到右拼起来,总列数是各表列数之和,行数取最大
【两个函数的核心差异】
重要提示 VSTACK和HSTACK是动态数组函数,微软官方标注适用于 Excel 365 / Excel 2024;Excel 2021 及更早版本请以实际为准,若不支持会显示 #NAME? 错误(WPS 新版已陆续支持,同样需实测)。
02
PART
基础语法
SYNTAX
这两个函数的语法极其简单,只需要记住一个核心参数,但可以无限扩展:
【VSTACK语法】
=VSTACK(数组1, [数组2], [数组3], ...)
【HSTACK语法】
=HSTACK(数组1, [数组2], [数组3], ...)
【参数说明】
【参数规则】
数组可以是连续的单元格区域(如A2:B10)、单个单元格、常量数组
VSTACK合并后:行数 = 各数组行数之和;列数 = 各数组最大列数
HSTACK合并后:列数 = 各数组列数之和;行数 = 各数组最大行数
数组数量不限,可以合并2个、3个甚至更多区域
支持跨工作表引用:Sheet2!A2:B10
支持跨工作簿引用:'[文件.xlsx]Sheet1'!A2:B10(需文件打开)
核心要点 1. VSTACK和HSTACK都是“非破坏性”操作,原数据不会被修改 2. 两个函数的参数规则完全一致,只是合并方向不同:一个纵向,一个横向 3. 合并的区域行列数可以不同,不足的部分会自动用#N/A填充 4. 这是替代复制粘贴、Power Query合并的最快方式
03
PART
VSTACK 纵向堆叠
VERTICAL
VSTACK函数用于将多个数据区域按上下顺序合并为一个新的垂直数组。
【实战示例:合并两个部门的员工名单】
假设A2:B4是销售部员工,D2:E5是技术部员工,需要合并成一张总表:
【公式】
=VSTACK(A2:B4, D2:E5)
【结果】7行2列的完整员工表
发生了什么? VSTACK将两个区域按上下顺序拼接: • 销售部3行 + 技术部4行 = 总共7行 • 两列数据完美对齐,直接合并 • 就像把两张纸上下贴在一起
实战技巧 1. 合并多个区域:=VSTACK(A2:B4, D2:E5, G2:H3) 可以合并3个甚至更多 2. 保留标题行只在第一个区域:第二个区域不要包含标题 3. 配合去重:=UNIQUE(VSTACK(A2:B10, D2:E10)) 合并后去重 4. 跨工作表:=VSTACK(Sheet1!A2:B10, Sheet2!A2:B10)
04
PART
HSTACK 横向拼接
HORIZONTAL
HSTACK函数用于将多个数据区域按左右顺序合并为一个新的水平数组。
【实战示例:合并员工基本信息和业绩数据】
假设A2:A5是员工姓名,C2:D5是业绩数据(销售额、提成),需要横向合并:
姓名
【公式】
=HSTACK(A2:A5, C2:D5)
【结果】4行3列的完整业绩表
发生了什么? HSTACK将两个区域按左右顺序拼接: • 姓名列(1列)+ 业绩列(2列)= 总共3列 • 4行数据完美对齐,直接合并 • 就像把两张纸左右贴在一起
实战技巧 1. 合并多个区域:=HSTACK(A2:A5, C2:D5, F2:F5) 可以合并3个甚至更多 2. 配合标题:=VSTACK({"姓名","销售额","提成"}, HSTACK(A2:A5, C2:D5)) 用VSTACK加标题行(注意:标题行要“摞”在数据上方,必须用VSTACK;用HSTACK会横向拼成多余列) 3. 合并公式结果:=HSTACK(UNIQUE(A2:A10), SUMIFS(C2:C10,A2:A10,UNIQUE(A2:A10))) 4. 与VSTACK组合:先VSTACK合并多表,再HSTACK添加新列
05
PART
行列不匹配处理
MISMATCH
当合并的区域行列数不一致时,Excel会在缺失的位置自动填充#N/A错误。这不可怕,我们有办法处理!
【VSTACK列数不匹配示例】
区域1是2列,区域2是3列,合并后区域1的第3列会显示#N/A:
【公式】
=VSTACK(A2:B3, D2:F3)
【结果】缺失位置显示#N/A
解决方案:用IFERROR替换#N/A =IFERROR(VSTACK(A2:B3, D2:F3), "") → 将#N/A替换为空白 =IFERROR(VSTACK(A2:B3, D2:F3), 0) → 将#N/A替换为0 =IFERROR(VSTACK(A2:B3, D2:F3), "无数据") → 将#N/A替换为自定义文本
【HSTACK行数不匹配示例】
区域1有3行,区域2有5行,合并后区域1的下方会显示#N/A:
姓名
【公式】
=IFERROR(HSTACK(A2:A4, C2:D6), "")
【结果】缺失位置显示空白
核心要点 1. VSTACK合并时,列数不一致 → 短区域右侧补#N/A 2. HSTACK合并时,行数不一致 → 短区域下方补#N/A 3. 最佳实践:合并前统一数据结构,或合并后用IFERROR清洗 4. 也可以用TOCOL(..., 3)同时忽略空白和错误:=TOCOL(VSTACK(...), 3)(1=只忽略空白,2=只忽略错误,3=两者都忽略)
06
PART
跨表/跨簿合并
CROSS SHEET
VSTACK和HSTACK最强大的功能之一,就是可以合并来自不同工作表甚至不同工作簿的数据,彻底告别复制粘贴!
【跨工作表合并】
假设“销售部”数据在Sheet1,“技术部”数据在Sheet2,“市场部”数据在Sheet3:
=VSTACK(Sheet1!A2:B10, Sheet2!A2:B10, Sheet3!A2:B10)
只需在区域前加上工作表名和感叹号,即可一键合并三个部门的全部数据!
【跨工作簿合并】
假设“华北区数据”在另一个Excel文件中:
=VSTACK('[华北数据.xlsx]Sheet1'!A2:B10, A2:B10)
注意:跨工作簿引用时,被引用的文件必须处于打开状态,否则公式会显示#REF!错误。
实战技巧 1. 跨工作表合并时,建议各表结构一致(列数相同、顺序相同) 2. 如果各表标题行不同,用DROP去掉多余标题:=VSTACK(DROP(Sheet1!A1:B10,1), DROP(Sheet2!A1:B10,1)) 3. 跨工作簿引用路径较长,建议先用「定义名称」命名区域,再引用名称 4. 文件关闭后跨工作簿引用会失效,建议将数据汇总到同一文件
07
PART
组合技黄金搭档
COMBO
VSTACK和HSTACK的真正威力在于与其他动态数组函数组合使用:
7.1 筛选后合并
=VSTACK(FILTER(A2:B10, C2:C10="销售部"), FILTER(A2:B10, C2:C10="技术部"))
先FILTER分别筛选出销售部和技术部的数据,再用VSTACK纵向合并。用途:按条件提取多部门数据并汇总。
7.2 合并后去重
=UNIQUE(VSTACK(A2:B10, D2:E10))
VSTACK先合并两个区域,UNIQUE再去重。用途:合并多来源数据并去除重复项。
7.3 合并后排序
=SORT(VSTACK(A2:B10, D2:E10), 1)
VSTACK先合并,SORT按第1列排序。用途:合并多表数据后自动排序。
7.4 分组汇总报表
=HSTACK(UNIQUE(A2:A10), SUMIFS(C2:C10, A2:A10, UNIQUE(A2:A10)))
HSTACK将UNIQUE提取的唯一类别和SUMIFS计算的汇总金额横向合并,形成二维报表。用途:动态分组汇总,替代数据透视表。
7.5 添加标题行
=VSTACK({"姓名","部门","业绩"}, A2:C10)
用常量数组{“姓名”,“部门”,“业绩”}作为标题行,VSTACK将其与数据区域合并。用途:为没有标题的数据区域添加表头。
7.6 二维转一维(逆透视)
=HSTACK(TOCOL(IF(B2:D5<>"", A2:A5)), TOCOL(IF(B2:D5<>"", B1:D1)), TOCOL(B2:D5))
将二维成绩表转为一维表:IF生成对应维度的标签,TOCOL展平,HSTACK横向合并三列。用途:数据透视表数据源准备。
组合逻辑 记住一个原则:VSTACK/HSTACK负责“合并框架”,其他函数负责“内容加工”。先FILTER筛选、先UNIQUE去重、先SORT排序,最后用VSTACK/HSTACK合并;或者先VSTACK/HSTACK合并,再用SORT/UNIQUE加工。
08
PART
多表合并实战
CASE STUDY
【场景1:合并多季度销售数据】
公司有三个季度的销售数据,分别在不同区域,需要合并成一张年度总表。
【Q1数据】
【Q2数据】
【Q3数据】
【需求拆解】
1. 步骤1:三个区域结构相同(姓名、销售额、季度) 2. 步骤2:用VSTACK纵向合并三个区域 3. 步骤3:合并后按销售额降序排序
【公式】
=SORT(VSTACK(A2:C3, E2:G3, I2:K3), 2, -1)
【结果】按销售额从高到低排列的年度总表
实战技巧 1. VSTACK可以合并任意数量的区域,只需用逗号分隔 2. SORT的第2参数2 = 按第2列(销售额)排序,-1 = 降序 3. 如果各区域在不同工作表,公式变为:=SORT(VSTACK(Sheet1!A2:C10, Sheet2!A2:C10, Sheet3!A2:C10), 2, -1) 4. 新增季度数据时,只需在VSTACK中添加新区域,结果自动更新
【场景2:动态分组汇总报表】
有一份销售明细表,需要按部门汇总销售额和订单数,生成动态报表。
【原始数据】
【需求拆解】
1. 步骤1:提取唯一部门列表 = UNIQUE(A2:A7) 2. 步骤2:按部门求和 = SUMIFS(C2:C7, A2:A7, UNIQUE(A2:A7)) 3. 步骤3:按部门计数 = COUNTIF(A2:A7, UNIQUE(A2:A7)) 4. 步骤4:用HSTACK将三列横向合并成报表
【公式】
=LET(部门, UNIQUE(A2:A7), VSTACK({"部门","总销售额","订单数"}, HSTACK(部门, SUMIFS(C2:C7, A2:A7, 部门), COUNTIF(A2:A7, 部门))))
【结果】动态分组汇总报表
实战技巧 1. LET函数让公式更易读:先定义“部门”变量,后续多次引用 2. 外层HSTACK添加标题行,内层HSTACK合并三列数据 3. 新增部门时,UNIQUE自动识别,SUMIFS/COUNTIF自动计算,报表完全动态 4. 这是替代数据透视表的核心技巧,源数据变,报表秒更新
09
PART
常见错误
TROUBLESHOOT
使用VSTACK和HSTACK函数时,这些坑你踩过吗?提前了解,少走弯路!
【建议公式速查】
=VSTACK(A2:B10, D2:E10) → 纵向合并两个区域
=HSTACK(A2:A10, C2:D10) → 横向合并两个区域
=VSTACK(Sheet1!A2:B10, Sheet2!A2:B10) → 跨工作表合并
=UNIQUE(VSTACK(A2:B10, D2:E10)) → 合并后去重
=SORT(VSTACK(A2:B10, D2:E10), 1) → 合并后排序
=IFERROR(VSTACK(A2:B3, D2:F3), "") → 合并并清除#N/A
=VSTACK({"标题1","标题2"}, A2:B10) → 添加标题行
=HSTACK(UNIQUE(A2:A10), SUMIFS(...)) → 分组汇总报表
=VSTACK(FILTER(...), FILTER(...)) → 筛选后合并
=TOCOL(VSTACK(A2:C10, E2:G10), 1) → 多区域合并转一列
10
PART
练习题
EXERCISES
动手练习是掌握VSTACK和HSTACK函数的最佳方式!打开Excel,跟着题目练一练吧!
【基础题 ★☆☆】
题目:A2:B5和D2:E5是两个员工区域,如何纵向合并?
答案: =VSTACK(A2:B5, D2:E5)
【基础题 ★☆☆】
题目:A2:A5是姓名,C2:D5是业绩,如何横向合并?
答案: =HSTACK(A2:A5, C2:D5)
【进阶题 ★★☆】
题目:合并A2:B3和D2:E3后,如何清除可能出现的#N/A?
答案: =IFERROR(VSTACK(A2:B3, D2:E3), "")
【进阶题 ★★☆】
题目:Sheet1和Sheet2各有数据,如何跨表纵向合并?
答案: =VSTACK(Sheet1!A2:B10, Sheet2!A2:B10)
【挑战题 ★★★】
题目:如何合并两个区域后自动去重?
答案: =UNIQUE(VSTACK(A2:B10, D2:E10))
【挑战题 ★★★】
题目:如何合并两个区域后按第一列排序?
答案: =SORT(VSTACK(A2:B10, D2:E10), 1)
【思考题 ★★★★】
题目:A2:B10是数据(无标题),如何合并后添加标题行「姓名」「部门」?
答案: =VSTACK({"姓名","部门"}, A2:B10)
【综合题 ★★★★★】
题目:A2:C10是销售明细(部门、姓名、业绩),如何生成按部门汇总的动态报表?
答案: =LET(部门, UNIQUE(A2:A10), VSTACK({"部门","总业绩"}, HSTACK(部门, SUMIFS(C2:C10, A2:A10, 部门))))
提示 VSTACK/HSTACK的核心是“先理解方向(纵向/横向),再处理匹配(行列对齐),最后组合加工”。简单合并用VSTACK/HSTACK,清洗数据用IFERROR,复杂场景用组合技。
关注公众号 · 每日更新 · 告别加班!
///
LAST
速查卡
CHEAT SHEET
一张表记住所有用法,收藏备用!
既然看到这里了,如果觉得有用,随手点个赞、在看、转发三连吧。
THANKS FOR READING