<p><img src="data/attachment/forum/202601/09/102353h83hp9rcr9r5c239.gif" alt="4ea900de1fdbb8de8872074437d1daa5.gif" title="vstack函数应用-Excel教程-匠们网" /></p>
; k% m5 K, |1 O" i<p>VSTACK 函数说白了就是 Excel 里的「数据叠叠乐神器」——专门帮你把好几份零散的数据,<strong>从上到下整整齐齐摞在一起</strong>。不用你手动复制、粘贴、调整格式,只要输一个公式,零散数据自动变完整列表;而且原数据改了,拼好的结果会自动跟着更,彻底解放双手!</p>
4 v+ U, U$ l9 ?# z4 ]. T% c<p>下面从「新手必会基础」到「进阶实战技巧」,一步步讲透,每个步骤都标清楚,新手也能直接跟着做。</p>
/ s0 \. @3 z- |( Q3 P4 k e- L' F$ g4 ]<h2>一、先搞懂核心:VSTACK 就干一件事——「上下拼数据」</h2>
* b5 k* v6 b9 M. s<p>你可以把它想象成「叠文件」:</p>
6 a* Q' C+ z# A9 p3 K3 u) `<ul>
: H1 @1 b, }/ l; K9 j1 ]% J' }. Z( ~<li>比如你有两页员工名单,第一页写着「张三、李四」,第二页写着「王五、赵六」;</li>
5 F' w# ]2 X" @' j! d2 p<li>VSTACK 就相当于把第二页直接放在第一页下面,变成一本完整的名单,而且不用你手动翻页、粘贴。</li>
. y$ J8 ^6 h4 G7 [ f</ul>
& {& U6 {6 E2 Q<p>关键特点:只管「上下拼」(垂直方向),不管左右拼(左右拼用 HSTACK,后面会提)。</p>' o& b$ W; j* U- ^8 d8 K2 J4 Q
<h2>二、新手必会:基础用法(3步就能上手)</h2>
* n4 c9 }, n) H1 @<h3>第一步:记住公式的「大白话结构」</h3>7 N& U6 H& a6 L: p+ Z* b
<p>公式基本写法:<code>=VSTACK(第一份要拼的数据, 第二份要拼的数据, 第三份要拼的数据...)</code></p>9 A# U* Y# i+ v) k e/ q& m
<p>解释:</p>
% X x/ d! r9 x0 o% g; a& ~<ul>( I1 B9 s$ ^/ \" T5 V
<li>括号里用「逗号」隔开每一份数据,逗号的意思就是「先放这份,再把下一份放它下面」;</li>* u$ ?/ \ t, G# y" D* \
<li>最少要拼2份数据(也能只拼1份,但没必要,直接复制数据就行);</li> s1 r% c9 E* O0 q. Z% z! u3 I) M
<li>公式只需要输在「一个空白单元格」里,输完按回车,Excel 会自动把拼好的结果往下/往右填(不用手动拽公式)。</li>
! `* ~* B. e, y D, C6 t. H0 s# c* j$ Z</ul>
' c/ R1 B4 r! t/ O( i* a7 s& ^3 x<h3>第二步:实操例子(最常见场景:拼两份结构一样的数据)</h3>+ `2 u, j, C( f" p
<p>假设你有两份员工名单,都有「ID」和「姓名」两列,分散在表格不同位置:</p>
$ a: B0 Y- ]2 O<p>「名单1」在 A1:B2 区域(2行2列):</p>. E0 O; z2 \% v! [; i
<table>
( F0 s; e% | {. n<thead>
8 y+ I0 w+ Y/ |8 ]) n! Y( C<tr>- H5 O2 O- L/ y8 D3 j/ y, j8 b
<th>A列(ID)</th>/ L0 E, M% q% y4 H. K6 l, a/ ^/ q
<th>B列(姓名)</th>( y+ p& ^4 H' v7 G5 w' V. T
</tr>9 P& T8 o; z8 H3 v
</thead>
6 w, D/ S Y$ z4 v8 | R+ e1 R<tbody>
5 k& M+ u! X- V+ F9 b, y1 E& G) c<tr>
/ M; r. }. m5 _: Y' f<td>101</td>
2 @. Q( z) N* C9 h+ f( r) W<td>张三</td>
5 h4 E4 E! R$ O i</tr>" [- Q9 a, ^8 u9 e
<tr>" p% @. S5 h! ?+ ]
<td>102</td>
! [4 M8 J1 y0 X9 A4 G; R& L<td>李四</td>- e0 [0 c b. z1 G0 u8 `# E
</tr>/ R% m) Y- @7 m5 u& v* m
<tr>
4 _% U$ h+ m' i( h: ]<td>「名单2」在 D1:E2 区域(2行2列):</td>, l- _5 j( a9 l; \0 R+ o
<td></td>8 Z+ c0 N. X4 g5 t/ F
</tr>+ x# p5 J, J9 m$ t) J) M" T" P- f6 I
</tbody>
3 V; w5 t. L. Y C</table>
; b0 `# q* v; |! t* E<table>: X8 R2 \& K. g. v
<thead>( e1 ?* A# A k4 X
<tr>5 l3 R D$ i# Z% G" K" R9 t
<th>D列(ID)</th>
! J# ^( f: r! B; Y<th>E列(姓名)</th>) V% r7 H V# p' P6 C7 K
</tr>! z$ H0 z) f; p: W$ L
</thead>
2 g+ o$ Y" @! T3 l# b<tbody>) H; Z# F9 ~/ `7 T6 Q# f
<tr>
3 q" Z* y! W3 F4 B, B- U<td>103</td>* S% R% I5 ~& E( h: g" V& ]" x
<td>王五</td>
' {" u- u! x! X" M</tr>( Y {: [. v% N4 @' F0 b/ c7 b
<tr>, Z; H0 I6 I: H' m
<td>104</td>4 k9 }; P5 |4 s1 H
<td>赵六</td>
`6 G1 b6 [6 H4 \</tr>
* I) |9 d8 p* x( z9 T2 v/ Z1 K<tr>9 U7 D0 {9 f. m/ b
<td>目标:把这两份名单拼在一起,变成4行2列的完整名单。</td>
3 b% y% E" k0 P<td></td>" O0 [2 t' o. q0 u; q9 f' ?5 p& U, P
</tr>
/ ]$ b* U0 M/ S2 w/ Z" [</tbody>
3 f/ e3 R' g2 n" D( l3 _</table>
5 D/ w S3 ~6 ~/ M0 i<p>具体操作步骤:</p>
1 r4 [" m, L1 B$ e, ^5 _<ol>! l- }% U8 j! y" w
<li>找一个「下面、右边都空着」的单元格(比如 G1,避免挡住原数据);</li>& A, C# z, W) g9 Y/ L, E% W
<li>输入公式:<code>=VSTACK(A1:B2, D1:E2)</code>;</li>
2 p: S5 H4 ^, b5 k<li>按回车,结果直接出来!</li>
7 F* ~% u1 m9 ]1 R' i, t</ol>
6 A/ Y, }/ e% z! S% P<p>最终拼好的结果(自动从 G1 往下溢出):</p>+ w" `# m- `) g- f! a* i
<table>* A3 L$ e7 e. C+ O
<thead>4 @- Z8 w& p8 S& W2 e. u
<tr>
; _$ v. S) Q+ f9 d" ]) G<th>G列</th>8 \, t1 G; n! v$ ^6 h
<th>H列</th>
: O8 _4 v9 I! G8 z+ y- Z</tr>
0 H$ N1 `" c% `8 [. _</thead>
* R/ [; S n k, e( v. h( g<tbody>
9 }: ^ m$ q9 q4 ]# Y- @9 b<tr>0 I; Z; N$ L, Q) s: @: V0 ]
<td>101</td>0 r# o+ ?+ Z' a4 U( U; I
<td>张三</td>
/ [" v3 Y' P" d6 d2 } S1 Y: L</tr>
5 C- R# |: v; g/ S; z<tr>
, q5 J' M" c# d7 |' v' s<td>102</td>( J, J v; j+ [. n0 g ?8 c
<td>李四</td>+ U+ n# n. k$ g8 `5 k
</tr>
4 c1 c+ @ d c9 G: m<tr>2 S, E4 M9 p3 [* I' {! H3 R
<td>103</td>3 L' P5 R: @1 ]+ T1 f% j
<td>王五</td> p$ ^$ t A$ L ^% X4 Z
</tr>
+ Q6 o$ ^. \6 R# W& `<tr>7 _- h( f* s1 b3 q+ h
<td>104</td>
, o+ S. w: y! s+ d. i( s! j<td>赵六</td>
6 ? ^: a+ s! f$ r0 ]4 W</tr>
; H `! t3 I8 C+ h% r( b1 a0 z<tr>
" v# w4 F$ \9 r( m9 R9 ~<td>补充:如果原数据改了(比如把张三的 ID 改成 201),拼好的结果会自动跟着变,不用重新输公式!</td>% n9 N' ]: M- B D8 e/ q
<td></td>* n6 F4 v0 v0 i/ {0 E
</tr>% B! |, ^; g0 q) N$ ?
</tbody>
! `5 `" }% S% f. E7 m4 B9 z</table>5 {! ~/ ?7 X$ N
<h3>第三步:拼多份数据(3份及以上)</h3>
' U! N: z2 V- R" z2 M) X/ O+ ^<p>如果还有「名单3」(在 G1:H2 区域:105 孙七、106 周八),想一起拼进去,公式直接加一个参数就行:</p>; ]. g# x/ z( c5 P% D0 ?
<p>公式:<code>=VSTACK(A1:B2, D1:E2, G1:H2)</code></p>
- h2 a9 U7 i8 N0 e1 N<p>解释:括号里用逗号多隔一个数据区域,Excel 就会按「A1:B2 → D1:E2 → G1:H2」的顺序,从上到下依次叠放。</p>. L" y9 m2 L. V6 f1 P' p: k
<h2>三、关键细节:遇到「不一样宽」的数据怎么办?</h2>
$ B. y M6 X; ]- P: i& U# o, P D<p>很多新手会遇到这个问题:要拼的几份数据,列数不一样(比如一份是2列,一份是1列)。别慌,Excel 会自动处理,我们只要知道怎么应对就行。</p>
% z/ ]. X. V/ X; J# r9 p<h3>场景:拼2列数据和1列数据</h3>
) a3 S! T6 O# }7 X4 A1 F6 Y0 @<p>比如:</p>$ K2 k$ S6 C* w( e3 |+ \
<ul>$ u. C- v( M1 V! t
<li>第一份数据:A1:B2(2列:ID+姓名);</li>8 p9 b/ W/ C: E# n$ J
<li>第二份数据:F1:F2(1列:只有 ID,没有姓名,内容是 105、106)。</li>
* [$ p6 y6 t9 v! F7 w3 d' U</ul>: K) t2 U. S, Q) u! {! Z: M% Z
<p>输入公式:<code>=VSTACK(A1:B2, F1:F2)</code></p>4 @/ t1 b% k$ Q% F- y/ Y
<p>结果会怎么样?</p>
7 }) Y" ?' \, ~ g2 D( W. k<p>Excel 会以「列数最多的那份数据」为标准,给列数少的数据补「空提示」——这里第二份数据少1列,所以姓名列会显示 <code>#N/A</code>(白话:这里没数据)。</p>
3 P' R! X- ^/ W# h<table>
) x3 m: A' e; m0 g% o6 L# P<thead>
, |& m# C1 u% [0 }& g<tr>
$ g+ }& h3 R8 w! C. N6 J! m4 B: i& x<th>ID</th>, ~ ^4 p8 ]* h- Q; D
<th>姓名</th>
" i+ Z* ]2 R6 C6 }</tr>
9 w# A8 W/ G, |- E }</thead>
! o$ P9 [# L' ]2 C( u; ^# m<tbody>
; `- {. m% ~6 l& \) g0 ~% W1 @<tr>5 }" X! e. Q0 ]
<td>101</td>
. p* f# ]% R* N<td>张三</td>
" q, P/ c7 {; N: c</tr>% V: a8 @' o% t0 @- I4 ~
<tr>
( N) V l( Y# B% W [1 D<td>102</td>
5 w; P, v; \6 i/ A: y3 R<td>李四</td>
1 j$ o9 \( z# i* G8 h</tr>
. |+ [* D! e6 J L9 y<tr>
# ^1 t5 m: ?3 h) K- d<td>105</td>! G$ x7 _& k3 W' n- p8 y5 ~2 m
<td>#N/A</td>
7 {$ L! W% u- F4 j2 M</tr>
- Y, Z( W% t* ^0 m5 q7 x7 w5 a<tr>& v0 p% `0 `- D Z$ G4 N( z
<td>106</td>+ s( k! q f, j
<td>#N/A</td>
: j% {& b: k7 |9 b# Y' K% {</tr>% L9 [2 t- H/ ?" s2 o! z
</tbody>7 n4 ?' f1 X* o
</table>
# r$ W6 y( {6 l<h3>进阶处理:把 #N/A 换成友好提示</h3>2 L0 C- u, Y( Y. O; v1 o. c7 y
<p>#N/A 看起来有点丑,我们可以加个小公式「IFERROR」,把它换成「无姓名」「暂无数据」这类友好的文字。</p># i3 y+ o/ B3 k: ^
<p>修改后公式:<code>=IFERROR(VSTACK(A1:B2, F1:F2), "无姓名")</code></p>* E% Y, V& X. e( C4 h
<p>解释:</p>
, u( Y g' P" I1 |<ul>1 `0 `$ T u9 o: b I3 P* H
<li>IFERROR 的作用是「如果公式出错误(比如 #N/A),就显示后面的文字;没错误就显示正常结果」;</li>
' t* x% k X, J* n3 b$ h3 |<li>这里把 #N/A 换成了「无姓名」,结果会更直观。</li>* Y& _. M, D+ Q$ q# [
</ul>
" L3 ?. v6 _' e; p" j' q<p>优化后结果:</p>6 H3 O- C% ^. l0 O1 C0 y7 v' p, c
<table>+ a+ r, G9 [& `! }& R" P+ q2 `" ]$ m {) m
<thead># Z6 o, A, y- H$ O
<tr>- v+ C N6 Y' x2 P! L c6 i8 {: c2 i" `
<th>ID</th>
% X6 C/ ?' T" D R7 P0 j5 W<th>姓名</th>& z) g3 z3 P* P9 A1 R& D
</tr>- t, R2 R' u" n( w" W4 q
</thead>
$ |* C; i; O( i* Q( O+ r<tbody>
" D* R# X5 W- i; }3 [( }7 j t<tr>2 v8 W, i# r3 L' s5 N
<td>101</td>* I }9 D o2 m& C
<td>张三</td>
; G. v* @# X, U8 O4 a2 K</tr>
; {7 E. U# S( t9 |0 k<tr>, ^5 n# t7 l8 o4 G1 r' Z
<td>102</td>
2 w! _- n$ d4 a) y* F! w6 k<td>李四</td>
& @% r" G0 f( j0 p' r7 \+ M! V</tr>& k d" ^8 j6 t4 H& T+ n% T: o
<tr>
: D& B7 \( r% l* l$ H<td>105</td>/ n- |- a! ?, G5 v3 L
<td>无姓名</td>( }1 d7 N; [ x
</tr>; J- Q1 b2 S6 p8 u, }0 J
<tr>6 ]* G3 R8 G: `0 q# b7 F
<td>106</td>! c+ V' t+ M; Q+ j6 O' o
<td>无姓名</td>( L( k7 k, ~$ |7 J" L- U' o: d$ K
</tr>8 W Q6 S. E6 s" C/ ]# u* O
</tbody>
" n, M" R; Z: Y8 ]+ B; a% P</table>/ I9 }4 p, R% _
<h3>高级技巧:给1列数据「手动补列」再拼</h3>
! [7 j! ^ {2 E6 f6 S( t<p>如果不想显示「无姓名」,而是想主动给1列数据补全列(比如给 F1:F2 的 ID 补「临时姓名」),可以用「CHOOSECOLS」函数补列,再拼。</p>
' z! q F2 O/ @<p>公式:<code>=VSTACK(A1:B2, CHOOSECOLS(F1:F2, 1, "")</code></p>
) V" g- K7 ^4 ]) R b; s<p>解释:</p>
2 y- h' T* `8 s<ul>
, M3 z8 D- M% ]) l<li>CHOOSECOLS(F1:F2, 1, ""):给 F 列(1列)补1列空值(""),变成2列;</li>1 ~. O* N6 `5 Q3 H B* E' q2 u
<li>这样拼出来的第二份数据就是2列,不会有 #N/A 了。</li>
+ L4 o+ S f* T v- m</ul>" L6 d& m2 t2 |! c- _$ H2 w
<p>结果:</p>
& z. `% \& `! N' Z6 p7 @<table>, \5 e% Z9 y, `% a n
<thead>! K0 ?% s$ }8 ~% C( k6 x
<tr>+ ~7 Q/ \$ D9 m1 V7 W3 u
<th>ID</th>9 r/ w/ T( v/ l
<th>姓名</th>
5 v3 q4 x d/ D1 S, E8 ?</tr>
0 N6 a& l# b: `! T! M& _</thead>
" s" T L+ ^2 y0 {1 O" J4 g6 D<tbody> k3 S' L1 G w2 x$ c. r. a
<tr>- O L) o! E0 A M x
<td>101</td>
( m* N' ^2 \- B/ z5 t<td>张三</td>, }2 ^+ v9 V/ o0 G; f
</tr>$ _3 x& N P* o* h n2 w ~
<tr>
7 j$ S& \4 Z7 Q; E [8 C+ j+ }2 u<td>102</td>
: a- z5 G" f+ \) ?: m<td>李四</td>
( H2 U" L2 E1 l+ d- V" @+ g</tr>: {+ G0 W: c% M0 d) C# d
<tr>! e3 y6 B8 S" D
<td>105</td>1 K/ C$ W* x" T$ K( V" U& |: D
<td>(空)</td>! O/ `+ |9 }) ]! s2 f- l
</tr>
8 \4 m1 P4 ~" E<tr>
9 c+ S5 ?% l- v. J, e<td>106</td>
# ]! q% ]7 ~5 }& P M. O<td>(空)</td>) L$ [5 S$ R1 b, n- F
</tr>
' L3 U7 J3 e; J# U* l1 |$ D% M</tbody>9 q' X5 |; ~4 ^% U" p) y& j& `. A
</table>
4 \ P% `1 p1 L<h2>四、进阶实战:VSTACK 搭配其他函数,实现「拼+整理」一站式搞定</h2>
7 c6 g) o4 r4 M i4 ~# l<p>VSTACK 不只能拼数据,还能和其他简单函数搭配,一次性完成「筛选→拼接→去重→排序」,不用多步操作。下面每个技巧都讲清「场景+公式+逐句解释+结果」。</p>8 u! n; M9 Z/ d8 E3 [6 T
<h3>技巧1:拼完自动去重(避免重复数据)</h3>4 n1 a- R; Y/ W# o/ f! U
<p>场景:两份名单里有重复数据(比如名单1和名单2都有「103 王五」),拼完想自动删掉重复行。</p>3 N/ |6 c# j3 U( G1 o! b% V
<p>公式:<code>=UNIQUE(VSTACK(A1:B2, D1:E2))</code></p>
3 j8 s+ ]- q; |. {2 ?$ {7 d: x7 k% `<p>逐句解释:</p>
$ p: F( j# p7 p3 Q<ol>
2 I/ D1 l' Y4 d) k, r, d: L<li>先执行括号里的 VSTACK(A1:B2, D1:E2):把两份数据拼在一起,得到含重复行的数组;</li>6 L. u. a- G% q8 a4 J( T' k
<li>再执行外面的 UNIQUE():把拼好的数组里的重复行删掉,只留唯一行。</li>
; ?4 L, U1 u e2 f7 Y/ W# t</ol>8 f8 T5 \7 a+ i
<p>原重复数据:</p>
; I2 F+ A" A" O$ p2 x2 h<p>名单1:101张三、102李四;名单2:103王五、103王五(重复)</p>
$ m, j% ?0 P8 L1 x; t. G( o& \<p>去重后结果:101张三、102李四、103王五(只留1个)</p>/ ~% y3 D' n: P9 c5 K2 x
<h3>技巧2:先筛选再拼接(只拼需要的数据)</h3>* T; j. _) s. ?( |4 j. h! O$ I
<p>场景:名单1里有空白行/无效数据(比如 A3:B3 是空的),不想把空行拼进去,想先筛掉再拼。</p>4 ?! R) [" z9 L, J" m7 T
<p>公式:<code>=VSTACK(FILTER(A1:B3, A1:A3<>""), D1:E2)</code></p>. L' y+ Y# s9 p' e% J/ o: ]9 E6 c
<p>逐句解释:</p>
: {9 n" Y6 V! ~5 Z. f<ol>
' v* r# j1 Y j7 Z/ Z& S8 E<li>FILTER(A1:B3, A1:A3<>""):筛选名单1(A1:B3),只保留「A列(ID)不是空」的行(A1:A3<>"" 就是「ID列非空」的意思);</li>
5 Q3 L5 X1 I; b8 f5 Q' P<li>VSTACK(筛选后的名单1, 名单2):把筛掉空行的名单1和名单2拼在一起。</li>3 e5 P; b' J8 Z4 D
</ol>
) q8 e$ q' Q( C$ c<p>补充:如果想筛选「特定条件」的数据(比如只拼 ID 大于102的员工),把筛选条件改成 A1:A3>102 就行,公式:<code>=VSTACK(FILTER(A1:B3, A1:A3>102), D1:E2)</code></p>( D" C( w6 x: B% [! H
<h3>技巧3:多条件筛选后拼接(更精准)</h3>
2 ]% w2 f% r: V! Q% T<p>场景:想从名单1和名单2里,各筛选出「ID>101 且 姓名含“六”」的员工,再拼在一起。</p>
/ D" ]- y# E7 u<p>公式:<code>=VSTACK( FILTER(A1:B2, (A1:A2>101)*ISNUMBER(SEARCH("六", B1:B2))), FILTER(D1:E2, (D1:D2>101)*ISNUMBER(SEARCH("六", E1:E2))) )</code></p>0 B* T4 u0 w, X: O# b v
<p>逐句解释:</p>
, N' c9 {0 h8 ^' d8 z) S- d! a<ol>4 }0 ]6 P6 V3 K: {/ {' l
<li>(A1:A2>101):条件1:ID大于101;</li>
+ C0 I+ D7 r% M/ a% u/ S<li>ISNUMBER(SEARCH("六", B1:B2)):条件2:姓名里含“六”(SEARCH("六", B1:B2) 找姓名里的“六”,ISNUMBER 把找到的结果变成「是/否」);</li>9 ?; W/ k2 q' S$ a
<li>两个条件用 * 连接:表示「同时满足两个条件」(相当于“并且”);</li>5 L1 @; q9 H8 I* C4 Z# M8 @
<li>分别筛选名单1和名单2后,再用 VSTACK 拼接。</li>
7 i0 y1 D3 K* [/ U! f</ol>
8 U v$ k u6 J( r4 G$ o<h3>技巧4:拼完自动排序(不用手动整理)</h3>
' [2 l$ w7 X' \" F<p>场景:拼完的名单是乱序的,想按 ID 从大到小/从小到大自动排序。</p>0 D" Y' V: w$ z- Y8 c" G
<p>公式(按 ID 降序,从大到小):<code>=SORT(VSTACK(A1:B2, D1:E2), 1, -1)</code></p>$ I7 l! V/ F: u2 w6 J* y( l$ p
<p>逐句解释:</p># e& V+ \! k0 ~; T/ `% f+ q
<ol>( B' I8 P1 Q' J( C/ a& [, s h
<li>6 V& b9 E& O0 b/ M
<p>VSTACK(A1:B2, D1:E2):先把两份数据拼好;</p>
# K! X, M: w" {0 T$ w</li>
2 ?: F7 n1 T* s8 e2 ]' K( o4 N<li>
4 N9 V3 f, ~# `0 ]$ h R& j<p>SORT(拼好的数组, 1, -1):给拼好的数组排序;</p>; P: |: j+ l! `: E4 z7 _
<ul>
8 B0 S1 a+ ^/ t0 j5 W4 Q<li>1:按第1列(ID列)排序;</li>
* v0 H1 A+ a% |0 Q, F7 H<li>-1:降序(从大到小);如果想升序(从小到大),把 -1 改成 1 就行。</li>
l+ f% _7 n% z% S7 R9 @7 B( p</ul>0 U# s+ Z- w a) x
</li>) d/ |% d O0 l3 [7 F, {
</ol>0 d& W- s6 Y0 Y/ r6 A
<p>例子结果:拼好的原数据是 101、102、103、104,降序后变成 104、103、102、101。</p>8 k! `' m3 v- J9 F
<h3>技巧5:跨工作表拼接(拼不同 sheet 的数据)</h3>
; e. Z* D- E8 V0 L<p>场景:你的数据分散在两个工作表里(比如「Sheet1」有名单1,「Sheet2」有名单2),想把它们拼在一起。</p>; [2 [8 `2 | c7 G& C- J! \: q
<p>公式:<code>=VSTACK(Sheet1!A1:B2, Sheet2!A1:B2)</code></p>+ Y) @# `3 B2 g
<p>关键细节:</p>
) e2 a; j) E* e1 i; ~<ul>
* H9 q t4 R' R<li>跨表引用格式:「工作表名!单元格区域」(比如 Sheet1!A1:B2 就是「Sheet1工作表的A1到B2区域」);</li>
! }1 f" K1 U" Y! B<li>如果工作表名有空格(比如「销售部名单」),要给工作表名加单引号:<code>=VSTACK('销售部名单'!A1:B2, '技术部名单'!A1:B2)</code>;</li>) {3 K7 j6 ]( S
<li>注意:两个工作表的数据列数要尽量一致,不然会补 #N/A(可以用前面讲的 IFERROR 处理)。</li>! G2 J: l0 L/ q
</ul>
! z- q* G( [* V2 {" @<h3>技巧6:跨工作簿拼接(拼不同 Excel 文件的数据)</h3>" w/ @9 y" [1 }/ J5 W
<p>场景:数据在两个不同的 Excel 文件里(比如「2024员工名单.xlsx」和「2025员工名单.xlsx」),想跨文件拼接。</p>
3 ^7 i% g0 F, r% D5 u- E% t/ d<p>公式:<code>=VSTACK([2024员工名单.xlsx]Sheet1!A1:B2, [2025员工名单.xlsx]Sheet1!A1:B2)</code></p>
+ d5 R! _( N0 K7 [& _8 a<p>关键注意事项:</p>
" B8 ^6 K6 l4 J<ul>
0 f3 S% D! R5 k/ d! K4 D# r<li>跨工作簿引用格式:「[工作簿文件名.xlsx]工作表名!区域」;</li>
* V6 v* }+ X4 q& H, f<li>必须打开这两个工作簿,公式才能正常用;如果关闭了,会显示 #REF! 错误;</li>5 Q" J& ]/ k E/ E
<li>如果工作簿文件路径有特殊字符(比如空格、中文),要给路径加单引号,比如:<code>=VSTACK('D:\工作文件\2024员工名单.xlsx'!A1:B2, 'D:\工作文件\2025员工名单.xlsx'!A1:B2)</code>。</li>
! _" z0 F" W+ \# Q</ul>
: a1 B4 c0 B# ]& ]5 @<h3>技巧7:动态数据源拼接(数据新增自动更新)</h3>- h' x% S' \" w# f- ?+ `
<p>场景:你的名单会不断新增数据(比如每月加新员工),想让拼接结果自动包含新数据,不用每次改公式。</p>, D" f/ Y8 ^7 b
<p>方法:先把数据源变成「表格对象」,再用 VSTACK 拼接。</p>
* |8 H* f9 q9 x) ] r0 g% N<p>具体步骤:</p>
3 L1 e. I/ K5 }- x<ol> T& s: Z) F# w- A+ c
<li>选中名单1的数据区域(A1:B2),按 Ctrl+T,勾选「我的表格有标题」,点击「确定」——这样就把 A1:B2 变成了表格(默认叫 Table1);</li>
, Y' S4 S- m; ~# w. f$ b<li>用同样的方法把名单2(D1:E2)变成表格(默认叫 Table2);</li>
8 q- K! p' D [7 Z$ g& G5 \<li>输入拼接公式:<code>=VSTACK(Table1, Table2)</code>。</li>
$ X' j7 E6 i, b3 q0 X. y0 G</ol>
4 x; \2 P4 s* M/ |8 M<p>效果:以后给 Table1 或 Table2 新增行(比如在 Table1 下面加 105 孙七),拼好的结果会自动包含这行新数据,不用改公式!</p>) G1 K" h% M, w2 t5 h9 u+ J. f2 K
<h3>技巧8:用 LET 函数简化长公式(进阶必备)</h3>0 Q1 e: M# j5 x" r2 V) E% K
<p>场景:如果公式又长又复杂(比如同时包含筛选、去重、排序、拼接),写起来容易错,还不好改。可以用 LET 函数给中间结果起名,简化公式。</p>1 y- D% G% k: X
<p>例子:筛选名单1(ID>101)、筛选名单2(ID>101),拼接后去重、排序。</p>
+ Q/ D' E9 L% d; L0 G9 v/ L<p>原来的长公式:<code>=SORT(UNIQUE(VSTACK(FILTER(A1:B2, A1:A2>101), FILTER(D1:E2, D1:D2>101))), 1, -1)</code></p>$ t; K$ N6 S4 w: ^1 S" O
<p>用 LET 简化后的公式:<code>=LET( 筛选1, FILTER(A1:B2, A1:A2>101), 筛选2, FILTER(D1:E2, D1:D2>101), 拼接, VSTACK(筛选1, 筛选2), 去重, UNIQUE(拼接), 排序, SORT(去重, 1, -1), 排序 )</code></p>
& Y+ a( J- _2 o% t- r1 C' B+ N<p>逐句解释:</p>9 b+ M; p% }6 h [% p1 a8 e
<ol>4 ]7 Z# B/ L4 ?! a3 b, x
<li>LET 的作用:给中间步骤起名,后面直接用名字引用,不用重复写公式;</li>
8 b! b) f2 E1 I0 h+ M1 A5 ]<li>筛选1=FILTER(...):给「筛选名单1」的结果起名叫「筛选1」;</li>6 m" ]0 r* d* o& i; O
<li>筛选2=FILTER(...):给「筛选名单2」的结果起名叫「筛选2」;</li>2 B, l& d7 R% h6 \" M' h# u# k
<li>拼接=VSTACK(...):给「拼接筛选1和筛选2」的结果起名叫「拼接」;</li>) {$ v2 R$ J; U/ A/ I( m+ ~
<li>去重=UNIQUE(...):给「去重拼接结果」起名叫「去重」;</li>
' N% s$ u# k4 O( \% U<li>排序=SORT(...):给「排序去重结果」起名叫「排序」;</li>/ d+ C; z' W, K3 `. b+ [3 g/ d( U
<li>最后一个「排序」:表示最终要显示的结果是「排序」步骤的结果。</li># p j% j1 K9 D/ j+ n5 q' p
</ol>+ i" l9 K q9 U( M
<p>优势:以后想改筛选条件(比如把 ID>101 改成 ID>102),只要改「筛选1」和「筛选2」里的条件就行,不用在长公式里找半天。</p>
k9 }) M* L% l- a. a6 `" @4 |& R0 y/ T<h2>五、常见踩坑:公式报错了?这样解决!</h2>( X- ?2 Z- ~8 E1 [$ `( J1 G% a
<h3>1. 出现 #SPILL! 错误(最常见)</h3>
6 v- ?; B- O; c# |0 G* f<p>原因:你输入公式的单元格下面/右边有别的内容(比如文字、数字、其他公式),挡住了拼好的数据要占的格子(Excel 叫「溢出区域被阻挡」)。</p>
2 ^2 g c% q X1 \<p>解决:</p>
" v4 _' j9 k- ~3 _$ d H* M) n<ul>3 [2 N* x# c; x8 n) G
<li>方法1:把挡住的格子清空(比如公式输在 G1,就清空 G1 下面、右边所有有内容的格子);</li>
2 Q% S8 l. @. g. [+ T. n<li>方法2:换一个「下面、右边都空着」的单元格输公式(比如最右边的空白列)。</li>
7 ]( t# ` I- I/ u$ p* f! q</ul>0 y! i5 ]8 y J; E, n& x0 N
<h3>2. 合并单元格导致拼出来乱套</h3>4 q& U; n) e6 d) k+ N
<p>原因:要拼的数据里有合并单元格(比如把 A1 和 B1 合并成一个单元格),Excel 认不出合并后的区域,会导致拼接结果错位。</p>
+ K% K V, |7 Z3 ^' w' Z* b<p>解决:先取消合并单元格(选中合并的单元格,点击顶部「开始」选项卡→「合并后居中」→「取消合并」),再拼数据。</p>& K' i' v P9 N0 G0 I
<h3>3. 数据类型不匹配(比如数字变文本)</h3>
% C5 T& i% P! F7 x1 k( y# i7 Q<p>原因:要拼的几份数据里,同一列的格式不一样(比如名单1的 ID 是「数字格式」,名单2的 ID 是「文本格式」),拼完后可能出现排序错乱、计算错误。</p>
X6 K/ \! f3 f! h9 j" \4 v8 m<p>解决:把两列的格式改成一样的:</p>
' T% x9 |' N! {/ n4 Z<ul>" H1 ], x: ]8 _9 t# ^! n
<li>选中要改的列(比如名单2的 D 列);</li>
) Y# N+ O" Q1 X. i& b, P+ N- L; [<li>点击顶部「开始」选项卡→「数字格式」下拉框;</li>
2 G7 R7 O) y* a$ ]; L<li>选择和名单1一致的格式(比如「数字」)。</li>
$ ~: p+ b7 j B. t( {: V</ul>( V! E+ f9 N5 z D0 d
<h3>4. 跨工作簿拼接报错 #REF!</h3>
6 V1 E( M: N2 r8 G<p>原因:引用的工作簿没打开,或者文件路径变了(比如把文件从 D 盘移到了 E 盘)。</p>/ l8 x$ E _. Z `$ j x6 _, t
<p>解决:</p>0 x0 e$ M2 q3 t( [9 X
<ul>( |3 e+ [% y8 F0 @6 T& v7 I, [ K) p
<li>先打开引用的所有工作簿;</li>( f6 l, w3 L5 ?4 z
<li>如果文件路径变了,重新写公式,重新选择数据区域(别手动改路径,容易错)。</li>
' \5 W( S# G }& k</ul>
- z; ^5 L- r' c9 R: C! T4 I- P+ n9 r<h3>5. 大数据量拼接卡顿</h3>
, L5 F! E G7 b<p>原因:要拼的数据总行数超过10万行,或者嵌套了太多函数(比如多层筛选+去重+排序),Excel 计算压力大。</p>: W7 S& o4 a% w# t H4 ?
<p>解决技巧:</p>; G( C+ T0 a/ O, V, {: c6 ]
<ul>5 b: [' g s8 u/ g% ~- T) C
<li>先把分散的数据源整理到同一工作表,减少跨表/跨文件引用;</li>
; k5 \0 S1 j) f, ?2 ~9 j8 B<li>先筛选再拼接,减少要拼的数据量(比如先筛掉无效数据,再拼);</li>
+ d3 a6 ` l5 D, n2 r1 Q9 Y Y W<li>关闭暂时不用的其他 Excel 文件,释放内存。</li>, h3 j- h& V& @: N2 D. L: P
</ul>- F% T, ]; T% O& b# Q/ H1 w( T9 g
<h2>六、总结:VSTACK 就是「垂直拼接懒人神器」</h2>+ F; r4 d6 P5 a) K
<p>记住3个核心点:</p>
1 m3 a" _, A( f# W: l<ol>
) ]8 e, u9 N" v+ U<li>核心功能:只做「上下拼数据」(垂直堆叠),想左右拼找 HSTACK;</li>; I. l3 \. d# \ q/ }$ g
<li>新手用法:公式=VSTACK(数据1, 数据2),输在空白单元格,按回车就出结果;</li>
4 ^+ k, c, c: w- S7 q/ V<li>进阶用法:搭配 FILTER(筛选)、UNIQUE(去重)、SORT(排序)、LET(简化公式),实现「筛选-拼接-整理」一站式搞定,还能动态更新。</li>
% \0 c3 O" M6 O1 Y! c( {</ol>
# c9 A2 T1 D1 O. h9 q<p>最后一句话:只要你想把多份数据「从上到下摞起来」,不管是简单拼接还是复杂整理,找 VSTACK 准没错!</p>
O& |) }) ?1 \6 W+ W<blockquote>4 ~- _6 x- n6 o" @- x
<p>(注:学好Excel必须要上手练习才行,不要一看就会,上手就废!!!)</p>
+ B% S5 t4 B5 y8 A* w( M, B7 f</blockquote>
\. W) B- X! E9 b# U |
-
温馨提示:
本文《Excel合并多列多行单元格去重排序操作--VSTACK函数》由: 打工日常 发表于 2026-1-9 10:25
原文链接:https://jiangmen.pro/thread-130-1-1.html
- 1、本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2、本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3、本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4、未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5、匠们网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6、下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7、本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
- 8、该内容可能包含由AI辅助创作,请仔细甄别。
|