
VSTACK 函数说白了就是 Excel 里的「数据叠叠乐神器」——专门帮你把好几份零散的数据,从上到下整整齐齐摞在一起。不用你手动复制、粘贴、调整格式,只要输一个公式,零散数据自动变完整列表;而且原数据改了,拼好的结果会自动跟着更,彻底解放双手!
下面从「新手必会基础」到「进阶实战技巧」,一步步讲透,每个步骤都标清楚,新手也能直接跟着做。
一、先搞懂核心:VSTACK 就干一件事——「上下拼数据」
你可以把它想象成「叠文件」:
- 比如你有两页员工名单,第一页写着「张三、李四」,第二页写着「王五、赵六」;
- VSTACK 就相当于把第二页直接放在第一页下面,变成一本完整的名单,而且不用你手动翻页、粘贴。
关键特点:只管「上下拼」(垂直方向),不管左右拼(左右拼用 HSTACK,后面会提)。
二、新手必会:基础用法(3步就能上手)
第一步:记住公式的「大白话结构」
公式基本写法:=VSTACK(第一份要拼的数据, 第二份要拼的数据, 第三份要拼的数据...)
解释:
- 括号里用「逗号」隔开每一份数据,逗号的意思就是「先放这份,再把下一份放它下面」;
- 最少要拼2份数据(也能只拼1份,但没必要,直接复制数据就行);
- 公式只需要输在「一个空白单元格」里,输完按回车,Excel 会自动把拼好的结果往下/往右填(不用手动拽公式)。
第二步:实操例子(最常见场景:拼两份结构一样的数据)
假设你有两份员工名单,都有「ID」和「姓名」两列,分散在表格不同位置:
「名单1」在 A1:B2 区域(2行2列):
| A列(ID) |
B列(姓名) |
| 101 |
张三 |
| 102 |
李四 |
| 「名单2」在 D1:E2 区域(2行2列): |
|
| D列(ID) |
E列(姓名) |
| 103 |
王五 |
| 104 |
赵六 |
| 目标:把这两份名单拼在一起,变成4行2列的完整名单。 |
|
具体操作步骤:
- 找一个「下面、右边都空着」的单元格(比如 G1,避免挡住原数据);
- 输入公式:
=VSTACK(A1:B2, D1:E2);
- 按回车,结果直接出来!
最终拼好的结果(自动从 G1 往下溢出):
| G列 |
H列 |
| 101 |
张三 |
| 102 |
李四 |
| 103 |
王五 |
| 104 |
赵六 |
| 补充:如果原数据改了(比如把张三的 ID 改成 201),拼好的结果会自动跟着变,不用重新输公式! |
|
第三步:拼多份数据(3份及以上)
如果还有「名单3」(在 G1:H2 区域:105 孙七、106 周八),想一起拼进去,公式直接加一个参数就行:
公式:=VSTACK(A1:B2, D1:E2, G1:H2)
解释:括号里用逗号多隔一个数据区域,Excel 就会按「A1:B2 → D1:E2 → G1:H2」的顺序,从上到下依次叠放。
三、关键细节:遇到「不一样宽」的数据怎么办?
很多新手会遇到这个问题:要拼的几份数据,列数不一样(比如一份是2列,一份是1列)。别慌,Excel 会自动处理,我们只要知道怎么应对就行。
场景:拼2列数据和1列数据
比如:
- 第一份数据:A1:B2(2列:ID+姓名);
- 第二份数据:F1:F2(1列:只有 ID,没有姓名,内容是 105、106)。
输入公式:=VSTACK(A1:B2, F1:F2)
结果会怎么样?
Excel 会以「列数最多的那份数据」为标准,给列数少的数据补「空提示」——这里第二份数据少1列,所以姓名列会显示 #N/A(白话:这里没数据)。
| ID |
姓名 |
| 101 |
张三 |
| 102 |
李四 |
| 105 |
#N/A |
| 106 |
#N/A |
进阶处理:把 #N/A 换成友好提示
#N/A 看起来有点丑,我们可以加个小公式「IFERROR」,把它换成「无姓名」「暂无数据」这类友好的文字。
修改后公式:=IFERROR(VSTACK(A1:B2, F1:F2), "无姓名")
解释:
- IFERROR 的作用是「如果公式出错误(比如 #N/A),就显示后面的文字;没错误就显示正常结果」;
- 这里把 #N/A 换成了「无姓名」,结果会更直观。
优化后结果:
| ID |
姓名 |
| 101 |
张三 |
| 102 |
李四 |
| 105 |
无姓名 |
| 106 |
无姓名 |
高级技巧:给1列数据「手动补列」再拼
如果不想显示「无姓名」,而是想主动给1列数据补全列(比如给 F1:F2 的 ID 补「临时姓名」),可以用「CHOOSECOLS」函数补列,再拼。
公式:=VSTACK(A1:B2, CHOOSECOLS(F1:F2, 1, "")
解释:
- CHOOSECOLS(F1:F2, 1, ""):给 F 列(1列)补1列空值(""),变成2列;
- 这样拼出来的第二份数据就是2列,不会有 #N/A 了。
结果:
| ID |
姓名 |
| 101 |
张三 |
| 102 |
李四 |
| 105 |
(空) |
| 106 |
(空) |
四、进阶实战:VSTACK 搭配其他函数,实现「拼+整理」一站式搞定
VSTACK 不只能拼数据,还能和其他简单函数搭配,一次性完成「筛选→拼接→去重→排序」,不用多步操作。下面每个技巧都讲清「场景+公式+逐句解释+结果」。
技巧1:拼完自动去重(避免重复数据)
场景:两份名单里有重复数据(比如名单1和名单2都有「103 王五」),拼完想自动删掉重复行。
公式:=UNIQUE(VSTACK(A1:B2, D1:E2))
逐句解释:
- 先执行括号里的 VSTACK(A1:B2, D1:E2):把两份数据拼在一起,得到含重复行的数组;
- 再执行外面的 UNIQUE():把拼好的数组里的重复行删掉,只留唯一行。
原重复数据:
名单1:101张三、102李四;名单2:103王五、103王五(重复)
去重后结果:101张三、102李四、103王五(只留1个)
技巧2:先筛选再拼接(只拼需要的数据)
场景:名单1里有空白行/无效数据(比如 A3:B3 是空的),不想把空行拼进去,想先筛掉再拼。
公式:=VSTACK(FILTER(A1:B3, A1:A3<>""), D1:E2)
逐句解释:
- FILTER(A1:B3, A1:A3<>""):筛选名单1(A1:B3),只保留「A列(ID)不是空」的行(A1:A3<>"" 就是「ID列非空」的意思);
- VSTACK(筛选后的名单1, 名单2):把筛掉空行的名单1和名单2拼在一起。
补充:如果想筛选「特定条件」的数据(比如只拼 ID 大于102的员工),把筛选条件改成 A1:A3>102 就行,公式:=VSTACK(FILTER(A1:B3, A1:A3>102), D1:E2)
技巧3:多条件筛选后拼接(更精准)
场景:想从名单1和名单2里,各筛选出「ID>101 且 姓名含“六”」的员工,再拼在一起。
公式:=VSTACK( FILTER(A1:B2, (A1:A2>101)*ISNUMBER(SEARCH("六", B1:B2))), FILTER(D1:E2, (D1:D2>101)*ISNUMBER(SEARCH("六", E1:E2))) )
逐句解释:
- (A1:A2>101):条件1:ID大于101;
- ISNUMBER(SEARCH("六", B1:B2)):条件2:姓名里含“六”(SEARCH("六", B1:B2) 找姓名里的“六”,ISNUMBER 把找到的结果变成「是/否」);
- 两个条件用 * 连接:表示「同时满足两个条件」(相当于“并且”);
- 分别筛选名单1和名单2后,再用 VSTACK 拼接。
技巧4:拼完自动排序(不用手动整理)
场景:拼完的名单是乱序的,想按 ID 从大到小/从小到大自动排序。
公式(按 ID 降序,从大到小):=SORT(VSTACK(A1:B2, D1:E2), 1, -1)
逐句解释:
-
VSTACK(A1:B2, D1:E2):先把两份数据拼好;
-
SORT(拼好的数组, 1, -1):给拼好的数组排序;
- 1:按第1列(ID列)排序;
- -1:降序(从大到小);如果想升序(从小到大),把 -1 改成 1 就行。
例子结果:拼好的原数据是 101、102、103、104,降序后变成 104、103、102、101。
技巧5:跨工作表拼接(拼不同 sheet 的数据)
场景:你的数据分散在两个工作表里(比如「Sheet1」有名单1,「Sheet2」有名单2),想把它们拼在一起。
公式:=VSTACK(Sheet1!A1:B2, Sheet2!A1:B2)
关键细节:
- 跨表引用格式:「工作表名!单元格区域」(比如 Sheet1!A1:B2 就是「Sheet1工作表的A1到B2区域」);
- 如果工作表名有空格(比如「销售部名单」),要给工作表名加单引号:
=VSTACK('销售部名单'!A1:B2, '技术部名单'!A1:B2);
- 注意:两个工作表的数据列数要尽量一致,不然会补 #N/A(可以用前面讲的 IFERROR 处理)。
技巧6:跨工作簿拼接(拼不同 Excel 文件的数据)
场景:数据在两个不同的 Excel 文件里(比如「2024员工名单.xlsx」和「2025员工名单.xlsx」),想跨文件拼接。
公式:=VSTACK([2024员工名单.xlsx]Sheet1!A1:B2, [2025员工名单.xlsx]Sheet1!A1:B2)
关键注意事项:
- 跨工作簿引用格式:「[工作簿文件名.xlsx]工作表名!区域」;
- 必须打开这两个工作簿,公式才能正常用;如果关闭了,会显示 #REF! 错误;
- 如果工作簿文件路径有特殊字符(比如空格、中文),要给路径加单引号,比如:
=VSTACK('D:\工作文件\2024员工名单.xlsx'!A1:B2, 'D:\工作文件\2025员工名单.xlsx'!A1:B2)。
技巧7:动态数据源拼接(数据新增自动更新)
场景:你的名单会不断新增数据(比如每月加新员工),想让拼接结果自动包含新数据,不用每次改公式。
方法:先把数据源变成「表格对象」,再用 VSTACK 拼接。
具体步骤:
- 选中名单1的数据区域(A1:B2),按 Ctrl+T,勾选「我的表格有标题」,点击「确定」——这样就把 A1:B2 变成了表格(默认叫 Table1);
- 用同样的方法把名单2(D1:E2)变成表格(默认叫 Table2);
- 输入拼接公式:
=VSTACK(Table1, Table2)。
效果:以后给 Table1 或 Table2 新增行(比如在 Table1 下面加 105 孙七),拼好的结果会自动包含这行新数据,不用改公式!
技巧8:用 LET 函数简化长公式(进阶必备)
场景:如果公式又长又复杂(比如同时包含筛选、去重、排序、拼接),写起来容易错,还不好改。可以用 LET 函数给中间结果起名,简化公式。
例子:筛选名单1(ID>101)、筛选名单2(ID>101),拼接后去重、排序。
原来的长公式:=SORT(UNIQUE(VSTACK(FILTER(A1:B2, A1:A2>101), FILTER(D1:E2, D1:D2>101))), 1, -1)
用 LET 简化后的公式:=LET( 筛选1, FILTER(A1:B2, A1:A2>101), 筛选2, FILTER(D1:E2, D1:D2>101), 拼接, VSTACK(筛选1, 筛选2), 去重, UNIQUE(拼接), 排序, SORT(去重, 1, -1), 排序 )
逐句解释:
- LET 的作用:给中间步骤起名,后面直接用名字引用,不用重复写公式;
- 筛选1=FILTER(...):给「筛选名单1」的结果起名叫「筛选1」;
- 筛选2=FILTER(...):给「筛选名单2」的结果起名叫「筛选2」;
- 拼接=VSTACK(...):给「拼接筛选1和筛选2」的结果起名叫「拼接」;
- 去重=UNIQUE(...):给「去重拼接结果」起名叫「去重」;
- 排序=SORT(...):给「排序去重结果」起名叫「排序」;
- 最后一个「排序」:表示最终要显示的结果是「排序」步骤的结果。
优势:以后想改筛选条件(比如把 ID>101 改成 ID>102),只要改「筛选1」和「筛选2」里的条件就行,不用在长公式里找半天。
五、常见踩坑:公式报错了?这样解决!
1. 出现 #SPILL! 错误(最常见)
原因:你输入公式的单元格下面/右边有别的内容(比如文字、数字、其他公式),挡住了拼好的数据要占的格子(Excel 叫「溢出区域被阻挡」)。
解决:
- 方法1:把挡住的格子清空(比如公式输在 G1,就清空 G1 下面、右边所有有内容的格子);
- 方法2:换一个「下面、右边都空着」的单元格输公式(比如最右边的空白列)。
2. 合并单元格导致拼出来乱套
原因:要拼的数据里有合并单元格(比如把 A1 和 B1 合并成一个单元格),Excel 认不出合并后的区域,会导致拼接结果错位。
解决:先取消合并单元格(选中合并的单元格,点击顶部「开始」选项卡→「合并后居中」→「取消合并」),再拼数据。
3. 数据类型不匹配(比如数字变文本)
原因:要拼的几份数据里,同一列的格式不一样(比如名单1的 ID 是「数字格式」,名单2的 ID 是「文本格式」),拼完后可能出现排序错乱、计算错误。
解决:把两列的格式改成一样的:
- 选中要改的列(比如名单2的 D 列);
- 点击顶部「开始」选项卡→「数字格式」下拉框;
- 选择和名单1一致的格式(比如「数字」)。
4. 跨工作簿拼接报错 #REF!
原因:引用的工作簿没打开,或者文件路径变了(比如把文件从 D 盘移到了 E 盘)。
解决:
- 先打开引用的所有工作簿;
- 如果文件路径变了,重新写公式,重新选择数据区域(别手动改路径,容易错)。
5. 大数据量拼接卡顿
原因:要拼的数据总行数超过10万行,或者嵌套了太多函数(比如多层筛选+去重+排序),Excel 计算压力大。
解决技巧:
- 先把分散的数据源整理到同一工作表,减少跨表/跨文件引用;
- 先筛选再拼接,减少要拼的数据量(比如先筛掉无效数据,再拼);
- 关闭暂时不用的其他 Excel 文件,释放内存。
六、总结:VSTACK 就是「垂直拼接懒人神器」
记住3个核心点:
- 核心功能:只做「上下拼数据」(垂直堆叠),想左右拼找 HSTACK;
- 新手用法:公式=VSTACK(数据1, 数据2),输在空白单元格,按回车就出结果;
- 进阶用法:搭配 FILTER(筛选)、UNIQUE(去重)、SORT(排序)、LET(简化公式),实现「筛选-拼接-整理」一站式搞定,还能动态更新。
最后一句话:只要你想把多份数据「从上到下摞起来」,不管是简单拼接还是复杂整理,找 VSTACK 准没错!
(注:学好Excel必须要上手练习才行,不要一看就会,上手就废!!!)