返回列表 发布新帖

[教程] Excel合并多列多行单元格去重排序操作--VSTACK函数

309 0
打工日常 发表于 2026-1-9 10:25:14 | 查看全部 阅读模式 来自:Error

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
<p><img src="data/attachment/forum/202601/09/102353h83hp9rcr9r5c239.gif" alt="4ea900de1fdbb8de8872074437d1daa5.gif" title="vstack函数应用-Excel教程-匠们网" /></p>, ]5 B1 n( i' }4 v/ U$ c( l, ]; A
<p>VSTACK 函数说白了就是 Excel 里的「数据叠叠乐神器」——专门帮你把好几份零散的数据,<strong>从上到下整整齐齐摞在一起</strong>。不用你手动复制、粘贴、调整格式,只要输一个公式,零散数据自动变完整列表;而且原数据改了,拼好的结果会自动跟着更,彻底解放双手!</p>9 k7 q5 o  T7 Y" d3 ]
<p>下面从「新手必会基础」到「进阶实战技巧」,一步步讲透,每个步骤都标清楚,新手也能直接跟着做。</p>
; }) H3 `5 ]6 J$ S( B<h2>一、先搞懂核心:VSTACK 就干一件事——「上下拼数据」</h2>
  \% W* i% y3 H+ M" M) e( C<p>你可以把它想象成「叠文件」:</p>
7 }$ w  q+ S# X/ m3 Y<ul>
, h: E+ {6 G1 {9 L! b- l% [' s5 L* Y<li>比如你有两页员工名单,第一页写着「张三、李四」,第二页写着「王五、赵六」;</li>
8 I- C% U6 y  h* j, @<li>VSTACK 就相当于把第二页直接放在第一页下面,变成一本完整的名单,而且不用你手动翻页、粘贴。</li>
! O( C  X$ T/ W+ ~4 O+ S$ N</ul>$ L( r/ u: w/ M: i
<p>关键特点:只管「上下拼」(垂直方向),不管左右拼(左右拼用 HSTACK,后面会提)。</p># s; v  Q/ ?! u0 m8 b' D& W
<h2>二、新手必会:基础用法(3步就能上手)</h2>
! {8 t' ~. f1 G1 b) s8 @# [" d<h3>第一步:记住公式的「大白话结构」</h3>) i1 J2 ?' k, o: a  {
<p>公式基本写法:<code>=VSTACK(第一份要拼的数据, 第二份要拼的数据, 第三份要拼的数据...)</code></p>
' u% r* c$ N1 ~4 U6 R  {7 n! T<p>解释:</p>
( w+ l3 s! Q1 _: w1 y, P5 g<ul>- Y: F  W( D8 U$ r8 z
<li>括号里用「逗号」隔开每一份数据,逗号的意思就是「先放这份,再把下一份放它下面」;</li>% C! m7 X9 }- a! ~4 Z2 \
<li>最少要拼2份数据(也能只拼1份,但没必要,直接复制数据就行);</li>
$ ^0 r) b9 l: j5 u$ ?/ I% O0 |<li>公式只需要输在「一个空白单元格」里,输完按回车,Excel 会自动把拼好的结果往下/往右填(不用手动拽公式)。</li>0 Q  r1 K: U( _9 _
</ul>1 O0 a% t8 R' a2 h- X. P' c
<h3>第二步:实操例子(最常见场景:拼两份结构一样的数据)</h3>* g2 k% o* F. i/ j
<p>假设你有两份员工名单,都有「ID」和「姓名」两列,分散在表格不同位置:</p>8 H' v# ]" y+ U6 H# [* D+ e
<p>「名单1」在 A1:B2 区域(2行2列):</p>1 H" P$ `3 o, y1 d" B1 W
<table>
% d( }3 }. d! s) R. z5 Y<thead>' E" A# H2 q& e
<tr>
4 a+ Q. n/ h$ b) g<th>A列(ID)</th>
$ y7 D- u) B; ~" |" ?( o<th>B列(姓名)</th>" P* T, e1 [/ g# ]6 E1 V: p" ?
</tr>3 K) M& I' b2 j  \& K! ]
</thead>3 I: m: P. E" E+ L1 O. m. e% b
<tbody>9 s  J- u* s8 X1 p" l0 x3 u
<tr>8 D  B% }! [; N. W$ S- n
<td>101</td>  n' _4 J$ ?3 s6 d3 s7 |1 m
<td>张三</td>
. P0 E( J9 R- L+ d</tr>
6 Q6 R6 S( E, W2 J7 i3 o<tr>
) b7 v1 a4 L& A3 [! g<td>102</td>( y9 |) P1 [; q
<td>李四</td>
  j% g1 {5 d+ G" E" W</tr>
  ?& x/ M! D) M8 T9 c- {3 K<tr>+ r5 M; p( i) Y/ s
<td>「名单2」在 D1:E2 区域(2行2列):</td>" r9 U* A7 w2 V" ?6 r6 V" a- b
<td></td>
) A1 W# l) h8 K3 f6 P3 w</tr>- e: Z/ m; c/ `- B+ }
</tbody>6 [. Q0 @9 q/ Z
</table>
/ a; E6 d5 O. Y) R0 p<table>! a* J) I: [+ g2 \5 Y
<thead>
/ }+ O. Y: {. J. \6 F. U0 E<tr>
4 Y5 \+ O" ?- h0 ?: a<th>D列(ID)</th>
8 J7 i3 z- o9 ^<th>E列(姓名)</th>8 ^/ w3 W" O, i# w8 E: s
</tr>
) n: ?' t' _3 q6 o</thead># C$ x" `3 x  T: J' W0 R& k
<tbody>' L! N+ |& w0 h& ]
<tr>
4 t  T4 g  L1 O2 m1 B<td>103</td>" p' t- Z  l8 G( k% l4 E
<td>王五</td>
+ D* `  |% @6 @5 R3 }</tr>
  Q. ]8 q6 n5 [( u$ ~1 `% S, f<tr>
! M# b: F7 ~( p4 F5 u( \8 H<td>104</td>
& G4 L$ B2 {8 K( l1 i  g# m<td>赵六</td>' L/ G# h: ]3 F1 g7 Q# b; D
</tr>
, ~& |8 J& o$ X+ x. h<tr>6 I. I2 |4 Z9 V4 r3 K
<td>目标:把这两份名单拼在一起,变成4行2列的完整名单。</td>6 _4 ?' W  x3 D7 T5 ~
<td></td>( S- @- ^8 s0 j0 K- Y4 K2 M2 L
</tr>; V2 ^# j3 B& {
</tbody>7 i8 C5 {0 j3 p2 u
</table>
, [6 W# @7 U* a$ s<p>具体操作步骤:</p>+ g/ f( O% ]- s5 S: C
<ol>, U. @; ]7 U/ d1 K2 O
<li>找一个「下面、右边都空着」的单元格(比如 G1,避免挡住原数据);</li>4 h, }% \+ B( j" ~* N4 c
<li>输入公式:<code>=VSTACK(A1:B2, D1:E2)</code>;</li>
! m0 g3 }' e0 D4 l0 l, ^3 Z. {<li>按回车,结果直接出来!</li>6 b0 A+ p* W8 a0 \- u
</ol>
) S9 z" l+ w) O* x- `3 R" ~# I<p>最终拼好的结果(自动从 G1 往下溢出):</p>
& A# o( L4 @+ x) A! q4 f( w<table>
4 v3 H5 |- x- ]7 a<thead>
6 ?" e, R' _6 @' I8 ?) N; q<tr>  S: c2 B# r% W! r- r8 ~4 f
<th>G列</th>
$ U& r  b" X) y+ O8 A& J% w3 l<th>H列</th>1 Y& T$ |2 O9 x+ W8 I# `* U
</tr>
1 E# T0 {7 Q+ ?) {% {</thead>0 e1 M0 n; E: B; u1 A8 M
<tbody>
7 B* f% o) {" W6 q7 l4 ^# A3 R0 p8 ?* l<tr>
( e3 q8 v. A  B" N, |<td>101</td>1 X* w  g5 u4 K$ q2 e9 E
<td>张三</td>( y' x) c8 A" z! [6 a
</tr>
. l! d! ^9 K- @  A. c3 P<tr>
/ {, l' G# A1 G. \' K' V' A<td>102</td>
% L  E* I4 G" M' w<td>李四</td>$ W" j8 T+ W$ H* m4 V2 F1 X
</tr>
# [$ K; R. Q+ |2 M<tr>0 L7 P( b: Z1 |# t" l7 w
<td>103</td>3 ]+ G; L4 y  f7 b. s3 t: ^
<td>王五</td>
9 ^' a- K: x/ s* U" N$ [# B* e</tr>4 x# w- f$ _; K8 s9 G7 f
<tr>
" I! J, H9 D3 R, r<td>104</td>
3 j# F% z# C! g6 c# t8 V6 ~8 `( g<td>赵六</td>
( H+ `' T, p# m</tr>, J+ V" _5 c- F0 i3 P. H
<tr>) f% ?2 _! i" b/ x* N/ B
<td>补充:如果原数据改了(比如把张三的 ID 改成 201),拼好的结果会自动跟着变,不用重新输公式!</td>1 N6 z% w1 m, E, f, a3 \5 b5 d% R' b3 H
<td></td>
3 g. j. c1 k  Y  V</tr>- C5 D  S. O0 D0 H8 E
</tbody>
- a- Q7 X* A3 O3 x3 M</table>& A! C- S9 T/ F, M0 F7 v
<h3>第三步:拼多份数据(3份及以上)</h3>. G; V$ y; u( F/ l! k5 u& O0 S
<p>如果还有「名单3」(在 G1:H2 区域:105 孙七、106 周八),想一起拼进去,公式直接加一个参数就行:</p>
; J$ \7 N- f9 f8 m) }: m8 s<p>公式:<code>=VSTACK(A1:B2, D1:E2, G1:H2)</code></p>  @9 I: @1 K# R. z$ _) m3 H
<p>解释:括号里用逗号多隔一个数据区域,Excel 就会按「A1:B2 → D1:E2 → G1:H2」的顺序,从上到下依次叠放。</p>" A* {# o0 x3 Z; w: K* m! \+ e$ K
<h2>三、关键细节:遇到「不一样宽」的数据怎么办?</h2>
- Z1 J1 @8 S* f2 J/ N4 Z<p>很多新手会遇到这个问题:要拼的几份数据,列数不一样(比如一份是2列,一份是1列)。别慌,Excel 会自动处理,我们只要知道怎么应对就行。</p>& ~# ~; A; [8 O- i, y
<h3>场景:拼2列数据和1列数据</h3>7 [/ ~& @. x+ m3 n! K
<p>比如:</p>
# `9 S/ G& o3 G* J8 g! h<ul>
: ?  i( o3 R. X; V<li>第一份数据:A1:B2(2列:ID+姓名);</li>8 G5 T# j) ^( g8 e! ]
<li>第二份数据:F1:F2(1列:只有 ID,没有姓名,内容是 105、106)。</li>
6 D; w7 I1 |, X) |  ?0 P</ul>; w. @5 j3 P& Y) {- {9 n
<p>输入公式:<code>=VSTACK(A1:B2, F1:F2)</code></p>, G6 f/ `9 ]% k7 }4 N4 v; p
<p>结果会怎么样?</p>
# Q6 R. _- n' T8 s<p>Excel 会以「列数最多的那份数据」为标准,给列数少的数据补「空提示」——这里第二份数据少1列,所以姓名列会显示 <code>#N/A</code>(白话:这里没数据)。</p>
0 K! A) B  a9 I# m5 D8 R1 q/ A' t* Z<table>
8 `1 k; W8 ?9 w; _# p<thead>
/ O4 E4 M3 ^! ?2 Z9 L; }- e6 g<tr># v1 p( ^$ N9 t" X- u
<th>ID</th>
& }( O' K1 |) k; f- {$ l: B<th>姓名</th>, `2 X0 D: d; a& U) T. G
</tr>7 U: X" t  [+ a: y/ O
</thead>
) C4 [% S+ M" [+ D: r5 l& I' m<tbody>/ `9 w7 f) r# h. L$ V9 T5 P* N
<tr>
+ Y* m" O' j+ u1 l2 t* X1 E<td>101</td>
. g* P# C( W: {6 P" ~<td>张三</td>
6 }% D- }1 o/ b5 l</tr>
4 H4 }# P2 q4 {# g<tr>4 _* h* ~8 n( z1 g4 R
<td>102</td>3 v6 Q% V/ j6 ~  Q8 ]
<td>李四</td>2 F! f6 c: B4 h* I' N
</tr>
. z) O6 N1 j  U5 }0 O9 ^<tr>, w0 |; }/ ^6 e3 m3 w; s& n
<td>105</td>, c9 a2 i) K& M3 E
<td>#N/A</td>
/ |8 o  Z) Z* {( I7 O* P# |  N</tr>
* a# B& ~2 T" P6 n: E) {<tr>
7 Q9 }- g, t+ W<td>106</td>9 e$ Q4 `. g2 @( L
<td>#N/A</td>
* C% }' ^$ q% f" T</tr>
4 X# X0 s" y& ^8 Q! B; y) ~</tbody>  h) ^, {8 G, T) g. i! l' O& I; i9 H
</table>9 j1 @1 X1 @2 p( H+ m6 y0 [
<h3>进阶处理:把 #N/A 换成友好提示</h3>* _$ X% k& m! Z6 H! `
<p>#N/A 看起来有点丑,我们可以加个小公式「IFERROR」,把它换成「无姓名」「暂无数据」这类友好的文字。</p>5 G4 R0 [8 \) L% V6 V* ?1 B
<p>修改后公式:<code>=IFERROR(VSTACK(A1:B2, F1:F2), &quot;无姓名&quot;)</code></p>
2 p* W: @" D9 @( F# T9 ^<p>解释:</p>
# ~9 g4 v1 `( K: @: q7 t* y/ q<ul>
; ]. X, Y- D- v) K* \/ Q/ W<li>IFERROR 的作用是「如果公式出错误(比如 #N/A),就显示后面的文字;没错误就显示正常结果」;</li>" c3 i8 X- F# Z$ e) X3 |4 h
<li>这里把 #N/A 换成了「无姓名」,结果会更直观。</li>
; [7 z7 G5 z: M0 Z. S% E& F</ul>  w- W9 S9 q9 H* G- M# A8 L
<p>优化后结果:</p>
0 G$ U5 p7 Z: [6 Z# \, w: M7 c<table>4 x# S4 ^5 A4 p3 _
<thead>& P# c3 q$ ^6 H7 ?
<tr>3 r. u5 G& Z3 V5 r2 y$ J
<th>ID</th>6 U8 G( k' L4 Q1 ]
<th>姓名</th>
' M: t# Z, [3 X% e</tr>
! h$ g9 {9 k+ T8 ]" ]  O</thead>7 v* h( N; o0 _) V
<tbody># X) I0 Q- u# R7 R2 x( M
<tr>
6 n# E+ L2 n3 m+ A% w<td>101</td>
2 b8 o/ t# W: ^0 ^  r+ p: L4 l<td>张三</td>
6 W0 V5 \$ N0 S4 V2 D</tr># x6 I9 {! ]4 T" ]' R
<tr>  u# V& a* F; w3 Z" N6 Y$ Q
<td>102</td>/ H, d7 b$ G/ F# B' ^
<td>李四</td>
. L3 M3 `) w4 y) H, j+ R0 a</tr>+ I6 }1 a8 U4 F' w. N
<tr>2 y. m  M, R8 q% n- \) F2 V5 G
<td>105</td>8 \3 |1 |( N% n0 m" t7 q2 F
<td>无姓名</td>
8 }! u, U9 ^( q6 ~5 u</tr>: `/ b/ a, J% x/ p5 _! i* `' I; s% p/ U0 |
<tr>; X8 M1 R+ t# F* `  _
<td>106</td>
- ~8 K) y0 r4 R6 O<td>无姓名</td>* `( J+ P/ E8 V. T2 T8 r7 L. k
</tr>
  C9 a( A+ w; N2 s3 J</tbody>
' F- l; ^) {( o& W# ^( `- H% a</table>
/ u/ M3 O5 B$ x, Y  W<h3>高级技巧:给1列数据「手动补列」再拼</h3>% l( r+ b/ _- ?: ~5 s3 f& R
<p>如果不想显示「无姓名」,而是想主动给1列数据补全列(比如给 F1:F2 的 ID 补「临时姓名」),可以用「CHOOSECOLS」函数补列,再拼。</p>
% J) S( W4 ]6 k( m* E+ V1 R0 N. y) I<p>公式:<code>=VSTACK(A1:B2, CHOOSECOLS(F1:F2, 1, &quot;&quot;)</code></p>
- L' o4 c  [6 {<p>解释:</p>
+ N8 t+ L. ]$ ?& F0 Q4 ?6 h<ul>0 o# Z2 w8 f& m: u
<li>CHOOSECOLS(F1:F2, 1, &quot;&quot;):给 F 列(1列)补1列空值(&quot;&quot;),变成2列;</li>, w1 ]4 ~& U1 ~" O, {! v
<li>这样拼出来的第二份数据就是2列,不会有 #N/A 了。</li>
0 W$ U2 A6 B: T  o</ul>
( ^3 J6 @- c# B* ?<p>结果:</p>: w8 o  p% r, M) I! ~+ h
<table>
( E' m7 o; F8 ~2 D; f$ K<thead>, E& N/ l) P$ C/ d% }
<tr>
) ]- t/ d; ]4 q' |<th>ID</th># }, N' k: {3 t# o+ d
<th>姓名</th>/ `- Z  T% Y# h  q
</tr>
: x8 y- p" ], _% ?</thead>
2 X9 u- ]$ N5 v, z& a<tbody>
0 h5 Z& @2 E' W( f# G% A* {<tr>6 a0 v6 H0 A' h! Y1 l; U
<td>101</td>
% x) A# A. W4 g  q. F<td>张三</td>1 Y; }0 f7 v4 b5 ^0 A4 U& b( |$ I
</tr>$ y) ]/ X9 e4 m8 H& b
<tr>2 `) O! U( g- v9 e5 [
<td>102</td>" f" _9 Z/ y# r
<td>李四</td>
3 w+ c* J8 w4 T: ~9 x5 U2 p( X</tr>, t) Z# R! W# R
<tr>6 \. m& i; r! g6 J" ^( d
<td>105</td>" I' K/ u6 a* ^
<td>(空)</td>; _9 y2 X7 b: o% j0 m
</tr>; p( [( A& _9 S+ x2 z0 o) c
<tr>
% I) r& O3 d* Q1 Q0 ^, c# O<td>106</td>
6 |* X1 Y" U7 H2 j( |3 Y* H* S5 N<td>(空)</td>) \) F, G% j, j, S
</tr>9 [( U4 V  `( _5 k
</tbody>0 H' \% D( W0 L2 b. g) }
</table>; O& Z8 o4 @% q) n* \+ B+ w
<h2>四、进阶实战:VSTACK 搭配其他函数,实现「拼+整理」一站式搞定</h2>
5 H' L$ H, h7 D, ^* _<p>VSTACK 不只能拼数据,还能和其他简单函数搭配,一次性完成「筛选→拼接→去重→排序」,不用多步操作。下面每个技巧都讲清「场景+公式+逐句解释+结果」。</p>5 W- e! z$ r9 v) E: U" e4 f% m
<h3>技巧1:拼完自动去重(避免重复数据)</h3>+ k% O5 v7 E3 U9 p, ]
<p>场景:两份名单里有重复数据(比如名单1和名单2都有「103 王五」),拼完想自动删掉重复行。</p>' Z3 ]( S& V* A- p/ J0 s4 r
<p>公式:<code>=UNIQUE(VSTACK(A1:B2, D1:E2))</code></p>
- k$ W5 @$ `' d3 O% u( P<p>逐句解释:</p>
7 o! E' I  T' p/ m) h<ol>
7 {5 E  b' ^$ a6 N3 U! J$ A<li>先执行括号里的 VSTACK(A1:B2, D1:E2):把两份数据拼在一起,得到含重复行的数组;</li>
: c& B1 s0 H; R2 t<li>再执行外面的 UNIQUE():把拼好的数组里的重复行删掉,只留唯一行。</li>. \" I# B7 r& f2 g- y( x5 Y
</ol>
* {4 V; \4 x+ J( y<p>原重复数据:</p>
5 f* F8 v5 B2 T! T<p>名单1:101张三、102李四;名单2:103王五、103王五(重复)</p>
; U9 J& Y: k4 i8 h& a3 |  j<p>去重后结果:101张三、102李四、103王五(只留1个)</p>6 L( D9 q4 x( z6 p# j. ]+ g6 `
<h3>技巧2:先筛选再拼接(只拼需要的数据)</h3>" D1 m/ ~+ j% s+ Y9 L& Q- O8 G8 H
<p>场景:名单1里有空白行/无效数据(比如 A3:B3 是空的),不想把空行拼进去,想先筛掉再拼。</p>2 M5 d# M. x0 ^2 F, P) g/ b8 Y5 f
<p>公式:<code>=VSTACK(FILTER(A1:B3, A1:A3&lt;&gt;&quot;&quot;), D1:E2)</code></p>
: r( K# S# G2 w# a" X<p>逐句解释:</p>
9 D+ ]! {7 t2 J8 K4 I! M<ol>( x* V! J- J! _( N, {. r2 G, y
<li>FILTER(A1:B3, A1:A3&lt;&gt;&quot;&quot;):筛选名单1(A1:B3),只保留「A列(ID)不是空」的行(A1:A3&lt;&gt;&quot;&quot; 就是「ID列非空」的意思);</li>- C4 q3 ~1 @1 X
<li>VSTACK(筛选后的名单1, 名单2):把筛掉空行的名单1和名单2拼在一起。</li>5 y0 S7 `5 M! i) `% N
</ol>! _+ o! @! }" e0 m3 |" Z* R# \
<p>补充:如果想筛选「特定条件」的数据(比如只拼 ID 大于102的员工),把筛选条件改成 A1:A3&gt;102 就行,公式:<code>=VSTACK(FILTER(A1:B3, A1:A3&gt;102), D1:E2)</code></p>5 C3 X. |! x, Q9 J. e
<h3>技巧3:多条件筛选后拼接(更精准)</h3>& P' ?5 r" T; K; s' }; n
<p>场景:想从名单1和名单2里,各筛选出「ID&gt;101 且 姓名含“六”」的员工,再拼在一起。</p>9 r7 V7 N# H) Y; z
<p>公式:<code>=VSTACK( FILTER(A1:B2, (A1:A2&gt;101)*ISNUMBER(SEARCH(&quot;六&quot;, B1:B2))), FILTER(D1:E2, (D1:D2&gt;101)*ISNUMBER(SEARCH(&quot;六&quot;, E1:E2))) )</code></p>
6 c+ N3 M2 ~$ B; U<p>逐句解释:</p>
# U; z) }( j: B9 l<ol>
2 ?1 ^2 k1 n5 m$ D<li>(A1:A2&gt;101):条件1:ID大于101;</li>
" c9 \/ F% s% R5 |5 u<li>ISNUMBER(SEARCH(&quot;六&quot;, B1:B2)):条件2:姓名里含“六”(SEARCH(&quot;六&quot;, B1:B2) 找姓名里的“六”,ISNUMBER 把找到的结果变成「是/否」);</li>
& n+ `% P5 t$ S, r8 F7 v( T8 g" Z5 T<li>两个条件用 * 连接:表示「同时满足两个条件」(相当于“并且”);</li>
( y/ f% J3 m5 m: q$ C6 R<li>分别筛选名单1和名单2后,再用 VSTACK 拼接。</li>4 Z2 F% l# _# ~: w
</ol>7 ]/ x8 D- O0 a8 N8 ]) I6 {
<h3>技巧4:拼完自动排序(不用手动整理)</h3>3 i: [! I# A* T4 h3 h; J' @
<p>场景:拼完的名单是乱序的,想按 ID 从大到小/从小到大自动排序。</p>
4 Q9 K5 _) f3 c0 j  V3 i<p>公式(按 ID 降序,从大到小):<code>=SORT(VSTACK(A1:B2, D1:E2), 1, -1)</code></p>
$ }# ^& [! u; q7 A<p>逐句解释:</p>
& ~# S2 J/ f; x0 L<ol>( E! ~9 r4 P' c! |
<li>7 B: L0 @7 D. H$ p, P
<p>VSTACK(A1:B2, D1:E2):先把两份数据拼好;</p>+ |1 M1 B& E- `. x; Z2 B2 X
</li>! f( c( J$ F- B2 X, s' _# @  ?
<li>
2 a2 V* W8 {" C5 \3 l9 x<p>SORT(拼好的数组, 1, -1):给拼好的数组排序;</p>8 m, W$ D" f1 N% \4 b" ]+ g
<ul>
7 l& a5 X9 y  t/ C+ ]6 U<li>1:按第1列(ID列)排序;</li>7 L7 K1 V  d; W2 F% y) c
<li>-1:降序(从大到小);如果想升序(从小到大),把 -1 改成 1 就行。</li>
- u: a/ B  H9 ^9 W</ul>3 C$ Z, e& }2 B7 ]
</li>
: A; g4 w( s! t9 p! b- o" T7 w0 q</ol>
  I6 V6 z. a: o2 z9 P: S<p>例子结果:拼好的原数据是 101、102、103、104,降序后变成 104、103、102、101。</p>4 s( L. w) k! B  l; p9 b+ |1 u
<h3>技巧5:跨工作表拼接(拼不同 sheet 的数据)</h3>0 I! c/ x' x7 w; w
<p>场景:你的数据分散在两个工作表里(比如「Sheet1」有名单1,「Sheet2」有名单2),想把它们拼在一起。</p>
7 M4 J7 a1 ~5 _* a9 M( }6 L<p>公式:<code>=VSTACK(Sheet1!A1:B2, Sheet2!A1:B2)</code></p>! Z9 q3 I/ s, ^- P
<p>关键细节:</p>
" s1 O( h% A6 n- S" _- i<ul>1 b7 G$ g" T' A9 \
<li>跨表引用格式:「工作表名!单元格区域」(比如 Sheet1!A1:B2 就是「Sheet1工作表的A1到B2区域」);</li>
  @& j- ~1 D) r' U<li>如果工作表名有空格(比如「销售部名单」),要给工作表名加单引号:<code>=VSTACK('销售部名单'!A1:B2, '技术部名单'!A1:B2)</code>;</li>
, I/ F0 l  S$ V0 F# E. z/ i: B<li>注意:两个工作表的数据列数要尽量一致,不然会补 #N/A(可以用前面讲的 IFERROR 处理)。</li>
( [5 t% |; R& `3 F! F</ul>3 g, B/ Z1 X! Y: H
<h3>技巧6:跨工作簿拼接(拼不同 Excel 文件的数据)</h3>5 v) \+ {' s$ P& O; H
<p>场景:数据在两个不同的 Excel 文件里(比如「2024员工名单.xlsx」和「2025员工名单.xlsx」),想跨文件拼接。</p>6 }2 V' K) U. n0 }
<p>公式:<code>=VSTACK([2024员工名单.xlsx]Sheet1!A1:B2, [2025员工名单.xlsx]Sheet1!A1:B2)</code></p>
( f! X8 v) b7 [# f$ \" h<p>关键注意事项:</p>
; O# K8 I& V9 v6 U1 Q+ E<ul>8 ~# m6 z# o2 l: C5 L  N
<li>跨工作簿引用格式:「[工作簿文件名.xlsx]工作表名!区域」;</li>
4 M, a- D6 f! {, n, }<li>必须打开这两个工作簿,公式才能正常用;如果关闭了,会显示 #REF! 错误;</li>
0 X& I( I% [' G/ b! g<li>如果工作簿文件路径有特殊字符(比如空格、中文),要给路径加单引号,比如:<code>=VSTACK('D:\工作文件\2024员工名单.xlsx'!A1:B2, 'D:\工作文件\2025员工名单.xlsx'!A1:B2)</code>。</li>0 M0 j- Y2 N* G
</ul>6 @! u+ L! B( M, L0 ~3 U4 O
<h3>技巧7:动态数据源拼接(数据新增自动更新)</h3>+ ~5 [3 f- B' o$ U
<p>场景:你的名单会不断新增数据(比如每月加新员工),想让拼接结果自动包含新数据,不用每次改公式。</p>  c6 i% x& c2 h9 s( {
<p>方法:先把数据源变成「表格对象」,再用 VSTACK 拼接。</p>
( c9 i1 G) ]# b' P! e0 o2 L5 {4 Y<p>具体步骤:</p>
5 f2 q9 f) \6 V! u<ol>
/ M$ s: P$ {6 e* q+ h<li>选中名单1的数据区域(A1:B2),按 Ctrl+T,勾选「我的表格有标题」,点击「确定」——这样就把 A1:B2 变成了表格(默认叫 Table1);</li>
! v: Y  Y& h  B( a+ _8 i, f' T<li>用同样的方法把名单2(D1:E2)变成表格(默认叫 Table2);</li>1 J/ K+ r# Z& O8 ~. c% }8 b/ q& R
<li>输入拼接公式:<code>=VSTACK(Table1, Table2)</code>。</li>
  T* r, G/ [3 j</ol>" G1 Z: O' l: `) v3 Q
<p>效果:以后给 Table1 或 Table2 新增行(比如在 Table1 下面加 105 孙七),拼好的结果会自动包含这行新数据,不用改公式!</p>
. a8 T# A* M4 Q  l<h3>技巧8:用 LET 函数简化长公式(进阶必备)</h3>7 n( @  |) i; S; w) n
<p>场景:如果公式又长又复杂(比如同时包含筛选、去重、排序、拼接),写起来容易错,还不好改。可以用 LET 函数给中间结果起名,简化公式。</p>$ q% U4 G5 y* I+ \- w& i
<p>例子:筛选名单1(ID&gt;101)、筛选名单2(ID&gt;101),拼接后去重、排序。</p>5 a% F3 E# z+ ^" F* r
<p>原来的长公式:<code>=SORT(UNIQUE(VSTACK(FILTER(A1:B2, A1:A2&gt;101), FILTER(D1:E2, D1:D2&gt;101))), 1, -1)</code></p>" o( ^1 f" E9 u6 @; {
<p>用 LET 简化后的公式:<code>=LET( 筛选1, FILTER(A1:B2, A1:A2&gt;101), 筛选2, FILTER(D1:E2, D1:D2&gt;101), 拼接, VSTACK(筛选1, 筛选2), 去重, UNIQUE(拼接), 排序, SORT(去重, 1, -1), 排序 )</code></p>
. c& x. v$ `( v; w0 Q1 v<p>逐句解释:</p>+ [* b8 i" g- D% t
<ol>
% `/ {2 M; Y: N2 v' F<li>LET 的作用:给中间步骤起名,后面直接用名字引用,不用重复写公式;</li>
+ Z: a: I6 a. K5 f0 {' B) Q<li>筛选1=FILTER(...):给「筛选名单1」的结果起名叫「筛选1」;</li>
4 T( g! m0 Z4 O<li>筛选2=FILTER(...):给「筛选名单2」的结果起名叫「筛选2」;</li>. D; n( j# R' A6 {
<li>拼接=VSTACK(...):给「拼接筛选1和筛选2」的结果起名叫「拼接」;</li>
2 g9 k: K( y! w: l, d2 Z<li>去重=UNIQUE(...):给「去重拼接结果」起名叫「去重」;</li>
. b; a2 d" B( r: |+ C% D% R<li>排序=SORT(...):给「排序去重结果」起名叫「排序」;</li>) {0 z& k1 J$ v' H$ t8 r& m: p% M) y' X
<li>最后一个「排序」:表示最终要显示的结果是「排序」步骤的结果。</li>
# K1 ~4 F% I% Y! |</ol>  g& \3 @8 j/ ^( |* }- A" ~0 f
<p>优势:以后想改筛选条件(比如把 ID&gt;101 改成 ID&gt;102),只要改「筛选1」和「筛选2」里的条件就行,不用在长公式里找半天。</p>3 m9 T% I2 P) v3 t. ?) H. P
<h2>五、常见踩坑:公式报错了?这样解决!</h2>2 q, ?& f$ ~6 V
<h3>1. 出现 #SPILL! 错误(最常见)</h3>5 u) T$ B# K  F2 n
<p>原因:你输入公式的单元格下面/右边有别的内容(比如文字、数字、其他公式),挡住了拼好的数据要占的格子(Excel 叫「溢出区域被阻挡」)。</p>4 [# _8 V7 X" B) e# U, f! U- k7 q
<p>解决:</p>
- g" Q+ J/ W, F<ul>
; u5 R7 h  }/ R<li>方法1:把挡住的格子清空(比如公式输在 G1,就清空 G1 下面、右边所有有内容的格子);</li>( L4 ^) R8 ~- b5 s
<li>方法2:换一个「下面、右边都空着」的单元格输公式(比如最右边的空白列)。</li>! p0 P& Z1 M7 `8 N. ]% D& r
</ul>8 v5 K9 {3 H6 q* q8 z: ]) s$ ?1 X
<h3>2. 合并单元格导致拼出来乱套</h3>
0 U$ w7 Q( q% ?9 F& W3 S<p>原因:要拼的数据里有合并单元格(比如把 A1 和 B1 合并成一个单元格),Excel 认不出合并后的区域,会导致拼接结果错位。</p>( m5 C/ Y. k/ B! {9 [* q
<p>解决:先取消合并单元格(选中合并的单元格,点击顶部「开始」选项卡→「合并后居中」→「取消合并」),再拼数据。</p>. {5 p5 x  R0 ~0 T6 K) ~
<h3>3. 数据类型不匹配(比如数字变文本)</h3>
% P9 x( j3 N( q2 X& ?# H<p>原因:要拼的几份数据里,同一列的格式不一样(比如名单1的 ID 是「数字格式」,名单2的 ID 是「文本格式」),拼完后可能出现排序错乱、计算错误。</p>% z) B# K4 u' c
<p>解决:把两列的格式改成一样的:</p>5 q  a) K6 a, x# ~
<ul>- p( V( x) o' @" n  A: i8 t7 Q
<li>选中要改的列(比如名单2的 D 列);</li>
- [+ z8 F' G" {8 l- u$ z! k4 [<li>点击顶部「开始」选项卡→「数字格式」下拉框;</li>
9 S* N% C0 C8 w4 `# e! Y<li>选择和名单1一致的格式(比如「数字」)。</li>3 ^& R4 e: o; \( g/ t3 B+ D, Z" W
</ul>
, L* j  x; T- O- i8 _' I4 c* ]8 e<h3>4. 跨工作簿拼接报错 #REF!</h3>
+ s4 G+ p7 g% M) l1 n6 t/ @<p>原因:引用的工作簿没打开,或者文件路径变了(比如把文件从 D 盘移到了 E 盘)。</p>  \$ S& d3 ]' v- ]+ e
<p>解决:</p>
% ]0 i1 _9 F! U$ |+ c$ B<ul>* Z$ _5 W9 @% v9 C9 b0 e& b
<li>先打开引用的所有工作簿;</li>4 D3 x4 e9 Z$ B7 \! p1 j
<li>如果文件路径变了,重新写公式,重新选择数据区域(别手动改路径,容易错)。</li>7 @2 |# M/ K' \
</ul>1 F) C* y: j/ K: G2 f6 L+ O
<h3>5. 大数据量拼接卡顿</h3>1 O7 k. A* P" E1 x' J# ]1 l$ y
<p>原因:要拼的数据总行数超过10万行,或者嵌套了太多函数(比如多层筛选+去重+排序),Excel 计算压力大。</p>
( p" S0 X8 \8 a2 L<p>解决技巧:</p>/ m1 x# T  m5 j6 q9 Y! L
<ul>
( y$ v! s5 S2 k<li>先把分散的数据源整理到同一工作表,减少跨表/跨文件引用;</li>+ y0 x- \; x6 i
<li>先筛选再拼接,减少要拼的数据量(比如先筛掉无效数据,再拼);</li>/ W) U6 P5 D2 p+ [9 ~2 X' o
<li>关闭暂时不用的其他 Excel 文件,释放内存。</li>
8 C" U) w) ]2 M, h% Q</ul>8 C5 {- r; S: V; m* P; J! Y+ a" |
<h2>六、总结:VSTACK 就是「垂直拼接懒人神器」</h2>
6 p9 o% [$ J4 a/ E0 O<p>记住3个核心点:</p>
! X3 W0 h/ p: s" Q8 A' n* U) s( u* l! {<ol>
6 e& F/ f; g- I: O+ l2 U<li>核心功能:只做「上下拼数据」(垂直堆叠),想左右拼找 HSTACK;</li>/ F, G( z5 Z+ h- d* X1 K
<li>新手用法:公式=VSTACK(数据1, 数据2),输在空白单元格,按回车就出结果;</li>
& T, U' E# W8 b4 m, k' e0 J  u<li>进阶用法:搭配 FILTER(筛选)、UNIQUE(去重)、SORT(排序)、LET(简化公式),实现「筛选-拼接-整理」一站式搞定,还能动态更新。</li>$ u: \9 d/ Z9 F" Y; ?
</ol>/ k; b! Q9 R" f1 ?8 `* T8 H
<p>最后一句话:只要你想把多份数据「从上到下摞起来」,不管是简单拼接还是复杂整理,找 VSTACK 准没错!</p>3 C9 ?( s- A/ \0 i
<blockquote>
, d8 A9 D6 _$ n" X<p>(注:学好Excel必须要上手练习才行,不要一看就会,上手就废!!!)</p>2 S9 d& P2 d2 Z) u; D0 b
</blockquote>
% ?9 V; U7 z6 i1 [& R) _
4ea900de1fdbb8de8872074437d1daa5.gif
匠心独运,千锤百炼,品质非凡。
回复 转播

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

您需要 登录 后才可以回复,轻松玩转社区,没有帐号?立即注册
快速回复
关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表