返回列表 发布新帖

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

325 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>3 a6 A" E9 z# w" o
<p>VSTACK 函数说白了就是 Excel 里的「数据叠叠乐神器」——专门帮你把好几份零散的数据,<strong>从上到下整整齐齐摞在一起</strong>。不用你手动复制、粘贴、调整格式,只要输一个公式,零散数据自动变完整列表;而且原数据改了,拼好的结果会自动跟着更,彻底解放双手!</p>- W' n- }1 q& l
<p>下面从「新手必会基础」到「进阶实战技巧」,一步步讲透,每个步骤都标清楚,新手也能直接跟着做。</p>
9 Q1 C; q6 R$ C<h2>一、先搞懂核心:VSTACK 就干一件事——「上下拼数据」</h2>  Q: X8 Z9 u( ?
<p>你可以把它想象成「叠文件」:</p>) A0 Q+ I; N2 z- x" {) A' Y; v  C7 d
<ul>
0 m  t7 f  s1 {" n  j( ?1 ?<li>比如你有两页员工名单,第一页写着「张三、李四」,第二页写着「王五、赵六」;</li>0 [2 ~+ u' `; y6 z3 m
<li>VSTACK 就相当于把第二页直接放在第一页下面,变成一本完整的名单,而且不用你手动翻页、粘贴。</li>
# p/ ?7 Q; ?2 K! X4 e</ul>5 H& ]# }; r" L% _
<p>关键特点:只管「上下拼」(垂直方向),不管左右拼(左右拼用 HSTACK,后面会提)。</p># d( k, d) X1 H$ H
<h2>二、新手必会:基础用法(3步就能上手)</h2>. W' ?4 h6 ^2 E6 j  g- l
<h3>第一步:记住公式的「大白话结构」</h3>
& P  m5 b9 z9 e<p>公式基本写法:<code>=VSTACK(第一份要拼的数据, 第二份要拼的数据, 第三份要拼的数据...)</code></p>
# F7 x+ ~9 F- a4 X0 {" _<p>解释:</p>5 G# a& X0 ^  w( c" q0 `0 B  Y
<ul>7 S  A4 \4 f4 H
<li>括号里用「逗号」隔开每一份数据,逗号的意思就是「先放这份,再把下一份放它下面」;</li>
6 M) N6 Y' A+ g7 @<li>最少要拼2份数据(也能只拼1份,但没必要,直接复制数据就行);</li>
8 t5 L# S0 ?' |( N& t  g0 [! ~<li>公式只需要输在「一个空白单元格」里,输完按回车,Excel 会自动把拼好的结果往下/往右填(不用手动拽公式)。</li>1 l, I3 E# P  Z  _+ g: \
</ul>
. g5 c& m/ C0 Q# V6 O# r" ~<h3>第二步:实操例子(最常见场景:拼两份结构一样的数据)</h3>
1 L, K- p& O1 Y<p>假设你有两份员工名单,都有「ID」和「姓名」两列,分散在表格不同位置:</p>4 ]. T: A! ^# a. J2 L! J" W
<p>「名单1」在 A1:B2 区域(2行2列):</p>! s( t* p7 G5 w& t
<table>" k& e0 `7 K7 r9 n5 V4 e9 ~' g
<thead>* ^: m. y- I( }3 z- u8 B
<tr>
) r1 m6 A: @* j<th>A列(ID)</th>
1 w8 [7 |5 q1 Y* V$ e<th>B列(姓名)</th>0 O8 ?0 k6 x4 }0 w4 E
</tr>( v9 A- `. D7 R/ ~# e; w3 l! `
</thead>" |$ G* y0 M" X8 O: \1 r! [- h
<tbody>
) @4 z9 t' N- M, A& E/ r<tr>; d) h0 T: X. Y# a9 R  e
<td>101</td>
. M' \7 {, V4 r0 y<td>张三</td>
; [* g* g3 l' p4 a! z2 e</tr>
% G+ R; M( s0 l8 \0 o; w# Q- Q<tr>2 U! g3 s! T4 M5 o% g
<td>102</td>
% E! `/ Y  m- z& Z2 ]* k<td>李四</td>
0 D2 [" F( W% r  I7 M* M</tr>) I. q$ G2 A1 d( R
<tr>
; ]/ p. {& M' ^+ z6 n<td>「名单2」在 D1:E2 区域(2行2列):</td>
3 Y4 g6 g7 u4 o4 J3 r. v<td></td>
$ W/ P! h: D/ D4 {4 {1 Z</tr>
6 K2 G' X3 m9 g3 S: T+ j</tbody>  Y1 Y/ m+ s3 E0 Z
</table>) ~6 @1 _# o1 x: C
<table>7 c2 t$ c& b, V# ?3 v
<thead>
+ R* S  H( @" _8 k<tr>
# f* p5 S8 R5 m( t% i  G# k<th>D列(ID)</th>8 f- ^. F# O# S/ o0 r5 F& r
<th>E列(姓名)</th>3 }+ M0 S& T* m8 h$ \" v" \' B( `
</tr>
( ~0 J: l# ~6 o+ R6 G' Y0 v* \</thead>0 _) n: ]$ U3 k& b* t  m
<tbody>/ y, N" N9 ^" Q4 w
<tr>
0 l: k6 p0 t- @. ?) t<td>103</td>! x. h2 K" t: [9 w4 K& H7 S
<td>王五</td>: \1 _! D- c7 `! z$ n( [! h
</tr>
) I9 R$ [5 W- S1 x" x" a4 R  z<tr>7 a* w7 ?* m- ]
<td>104</td>, E3 R- h9 [0 W: O  ?5 i
<td>赵六</td>1 e7 U( {& d" d0 F! b9 Y: P
</tr>
( s. ^* l1 ^0 o! \3 [% u<tr>; O# t( A4 A" X* u- T
<td>目标:把这两份名单拼在一起,变成4行2列的完整名单。</td>0 V8 @2 R( E# x) u
<td></td>% {+ ]" D! n1 `0 n) q+ Z4 \
</tr>- ?- [* S; w/ y+ Z3 M& r3 T
</tbody>' \0 D. w+ I* o7 s; o$ i
</table>
) ~  S: f. Y( H  H<p>具体操作步骤:</p>
. ]. ^2 ~/ N; w( ^, [<ol>
# A3 X7 [. d7 P: a# R<li>找一个「下面、右边都空着」的单元格(比如 G1,避免挡住原数据);</li>
0 }. Q+ d3 V. a0 d! t( ]<li>输入公式:<code>=VSTACK(A1:B2, D1:E2)</code>;</li>4 U( H* M+ v5 [/ \
<li>按回车,结果直接出来!</li>
2 p% J8 h" E) z; r1 c; F, j$ i</ol>! M: N, \- _, X6 A2 @5 a0 y1 p
<p>最终拼好的结果(自动从 G1 往下溢出):</p>7 A" L: w- e; R3 p5 i" F/ E
<table>
( }  f9 N+ [: L: V' h3 h4 x& n<thead>
& g5 R' W( w. \) F% y<tr>8 n+ P, R( T7 W; F0 c3 N) @
<th>G列</th>
8 L) w0 L. E* F5 x: ]1 N<th>H列</th>
+ e/ ^+ f. I$ Q. Y</tr>+ k+ u% y2 l* X/ A- F
</thead>
/ t3 l0 U/ h0 p3 f+ Q: }. P/ K$ O: B<tbody>' b  j2 L) Y! m2 J
<tr>
* A& I- O+ I' S/ P5 C' S4 f4 p<td>101</td>
: @  @6 g; g8 v6 O, Z<td>张三</td>. |! a/ e. R: m9 v
</tr>
  e2 X- R/ x; B; i<tr>' d8 P) h3 ^+ u0 c# Y
<td>102</td>
  \, `0 O3 ?! u" b0 F% I& D<td>李四</td>1 |" W% `! w# V* q
</tr>
$ C4 Y. }: A3 P' x<tr>& i* ]/ w- R( a
<td>103</td>" L1 g6 x1 I5 I' E
<td>王五</td>" q0 f5 q8 s0 {4 e( @; ~/ M! Z
</tr>
) L. M. j3 b! I& A; X<tr>
$ c: C% y5 |4 t  [! m$ B5 s& v1 G" @! u<td>104</td>
+ g  C# `3 v+ g% m8 d3 P" U, d<td>赵六</td>
" d: z9 ]/ W5 f/ A3 K' z8 d</tr>
$ A2 m+ T+ t5 I<tr>
1 |9 S' C* e7 f; H& J0 W<td>补充:如果原数据改了(比如把张三的 ID 改成 201),拼好的结果会自动跟着变,不用重新输公式!</td>* d* ?: b$ C  V! N" m3 m8 k
<td></td>' g. r- @. h* Q  w* x
</tr>1 e8 ~, K8 r  l6 M
</tbody>' i' N, x: }  x& V2 R, y
</table>
6 I3 U6 |& v, b  p1 Q, K4 H4 ^$ `<h3>第三步:拼多份数据(3份及以上)</h3>7 ]0 V- b, ]) s  W! A6 Q* I
<p>如果还有「名单3」(在 G1:H2 区域:105 孙七、106 周八),想一起拼进去,公式直接加一个参数就行:</p>) `& R. B/ s6 v8 a6 n% H; D
<p>公式:<code>=VSTACK(A1:B2, D1:E2, G1:H2)</code></p>
2 `+ O; [0 M9 J4 i  g<p>解释:括号里用逗号多隔一个数据区域,Excel 就会按「A1:B2 → D1:E2 → G1:H2」的顺序,从上到下依次叠放。</p>* ]( `7 X3 D2 J
<h2>三、关键细节:遇到「不一样宽」的数据怎么办?</h2>
, H# N' f' m' w6 v; P6 r<p>很多新手会遇到这个问题:要拼的几份数据,列数不一样(比如一份是2列,一份是1列)。别慌,Excel 会自动处理,我们只要知道怎么应对就行。</p>
& x* T$ b* s& g6 P% U( t) W" b<h3>场景:拼2列数据和1列数据</h3>
. b/ T* Z' R( Z<p>比如:</p>
5 ]  F9 y. q4 p<ul>6 w  {- F! ^4 K5 v) o
<li>第一份数据:A1:B2(2列:ID+姓名);</li>
- }6 t  ^, H. Q8 ^+ H0 U<li>第二份数据:F1:F2(1列:只有 ID,没有姓名,内容是 105、106)。</li>3 R$ o0 {. e8 f3 G+ h2 x. w
</ul>
* c, w3 C3 w) _) F<p>输入公式:<code>=VSTACK(A1:B2, F1:F2)</code></p>( j8 a! U- T7 e" t. A/ b$ u! _
<p>结果会怎么样?</p>
8 F* c. N6 c6 i+ q* Q; j3 k<p>Excel 会以「列数最多的那份数据」为标准,给列数少的数据补「空提示」——这里第二份数据少1列,所以姓名列会显示 <code>#N/A</code>(白话:这里没数据)。</p>
6 S7 |/ @4 _% y+ }) U4 V2 n/ L<table>4 Q( {  l# D6 P3 ]' ]9 T& v' S
<thead>
; I3 u. _) }1 E0 L- p0 C3 g<tr>
6 `/ a' H# }7 X  ?0 m8 T<th>ID</th>
! g3 c/ K' C- S$ G<th>姓名</th>
) ]: ~" X* k% f  |. a</tr>
5 l: e* X% c* d% U  u/ h6 Z</thead>
( [, v3 \$ `9 M3 A% x) w<tbody>
* |$ n# _, m) O3 Z3 ~<tr>
( _) O" k, W% c2 J3 _, T<td>101</td>
" G8 [! B8 y: [5 ~<td>张三</td>
( H3 a* @. K; P! j' W5 n</tr>( N: i8 Z1 r& Q' Y$ c
<tr>0 F" G. N9 C6 R* G; B+ v) `
<td>102</td>
: @9 p, L" Y& ^2 t" x! O8 j! i<td>李四</td>
2 f7 O; k6 k; y- R9 K3 x6 o</tr>6 t- \! ?* M7 }
<tr>2 k, S* j: d5 B) N5 d
<td>105</td>
: q% t" p# b- Y# t<td>#N/A</td>& m! M) r- ~' p2 g: n4 |! [
</tr># I( L: f6 ]  j" V2 Q- I
<tr>" z' x" w6 P- P2 m
<td>106</td>- [7 w! Z8 a+ H% k( J
<td>#N/A</td>2 m6 b" v) l- X* [& O& Q
</tr>
! g2 @. w% |0 K! r! f+ C" q  t</tbody>8 ]& ~; X  R" b7 P6 {
</table>$ S, |* ~: P. f' R: ]6 e  V
<h3>进阶处理:把 #N/A 换成友好提示</h3>
0 Q- ]" \8 t' i+ h<p>#N/A 看起来有点丑,我们可以加个小公式「IFERROR」,把它换成「无姓名」「暂无数据」这类友好的文字。</p>
1 ?  _1 w0 z5 m8 A2 j& `6 V" s<p>修改后公式:<code>=IFERROR(VSTACK(A1:B2, F1:F2), &quot;无姓名&quot;)</code></p>
) q+ Q; D# @2 F( x2 H. F  N6 o<p>解释:</p>
5 H1 o) {2 h; I# O) b<ul>
4 D: Y. v, z- t& i. |! p& G1 Y; s0 E<li>IFERROR 的作用是「如果公式出错误(比如 #N/A),就显示后面的文字;没错误就显示正常结果」;</li>/ b7 U0 i6 Z3 J3 j0 D2 Y  V
<li>这里把 #N/A 换成了「无姓名」,结果会更直观。</li>
) a) g& p3 m& ]( [  j# z( I</ul>5 a& l" a$ U# D' z0 l& O
<p>优化后结果:</p># F7 C' a& K. |
<table>; V5 o9 b8 O5 Z. w( y4 N
<thead>& @" ~1 F3 H% k
<tr>
* a  r: h8 N5 f; c6 T3 [$ L' W+ |<th>ID</th>7 k/ A1 _# Z; `
<th>姓名</th>
$ `% k- b5 e* H9 O+ G& \</tr>
. n- g" C4 X3 b  O" F; A</thead>
! w: A7 |" m) |$ K) B<tbody>
$ t# F+ Z( d- _7 v<tr>2 Y6 s6 K5 ?; D/ y
<td>101</td>* _+ q! ?/ Y! V7 ~/ v0 C4 ^
<td>张三</td>
9 n# J- M& g6 @, t! U/ c</tr>  b- B% r. l( S7 s- c
<tr>% o: l0 ]: x8 d  l
<td>102</td>/ D! J, P' z" i  D# q
<td>李四</td>. d! j; ?' G) `" e
</tr>
9 Q! j" Z. |8 I* ~<tr>
: R9 R4 k8 [: A! e<td>105</td>
2 G$ p- e6 o) s/ E' [<td>无姓名</td>
1 n$ ~7 f, u. B2 t</tr>
5 {3 H; g! F, X4 @, a- `<tr>
( g1 S  B" q- K* a' e9 Y<td>106</td>7 T% p9 f8 t$ U3 O# e' U: u
<td>无姓名</td>
1 h9 y' X! P" a0 Z  m* U</tr>
6 L) ]+ i. W" R</tbody>/ n3 R( t0 W0 G& h+ |
</table># z4 r5 e1 P1 \: v5 }0 O, [7 b! k
<h3>高级技巧:给1列数据「手动补列」再拼</h3>
- f$ O, v1 V; ~0 x2 n/ \<p>如果不想显示「无姓名」,而是想主动给1列数据补全列(比如给 F1:F2 的 ID 补「临时姓名」),可以用「CHOOSECOLS」函数补列,再拼。</p>
5 B/ Q7 \3 T, y( a. @7 C4 _$ f<p>公式:<code>=VSTACK(A1:B2, CHOOSECOLS(F1:F2, 1, &quot;&quot;)</code></p>
( a& G5 z( @( @+ l0 Y<p>解释:</p>& [# ~: n& ~. p# F, n+ b; o
<ul>( @6 N% b( d) a; u
<li>CHOOSECOLS(F1:F2, 1, &quot;&quot;):给 F 列(1列)补1列空值(&quot;&quot;),变成2列;</li>; C7 x+ u' r- ~7 v$ i. ^" _
<li>这样拼出来的第二份数据就是2列,不会有 #N/A 了。</li>
2 f3 D0 W( {& F) {</ul>
/ Y( \: Z9 _8 v, x+ |4 E<p>结果:</p>
' `5 b, P% {& G* C4 T, L<table>5 y6 l; ~) `4 D7 t5 d
<thead>
, `! P( A. t3 q' o<tr>7 k" \* f5 v6 d. p  d: A/ U( r
<th>ID</th>
4 O' I7 q( Z$ _/ g3 t<th>姓名</th>5 E) j  S, S1 Q- E* Z0 r
</tr>" i5 F: h6 d- S+ i! u7 C
</thead>' e8 i- Z7 c2 P$ I& x
<tbody>9 c8 u( }  L& B# ^' J* l" K
<tr>
' d  k) b( R" ?# V8 C( K<td>101</td>
. W+ x$ _- c5 R, {& I# Q* r& |/ v+ n& I<td>张三</td>9 m8 N. P4 `8 o7 }2 f' f$ ^
</tr>1 S; m& Y8 J4 {6 y/ Y2 p2 R# Y, e
<tr>
4 w! B' R; Z+ ]; E0 K<td>102</td>, ?. ~- ]: @! D1 R( n0 |$ U/ P
<td>李四</td>
$ Q1 ~+ n, X* k' o0 Q8 H3 s0 A- B</tr>
. l" R! q" v, k) `<tr>
- U# K# M) {* _( g8 _6 J: X' D6 N<td>105</td>
+ Q4 o! B: e! |, @4 A6 f  m<td>(空)</td>
1 s2 ^/ C; F; M</tr>( ?3 i4 @5 F5 J0 Y& f
<tr>$ d9 c+ J% q. X$ V. S; C( K
<td>106</td>
- F' ^' \) ]2 R& N$ Z- \<td>(空)</td>1 \, p4 r4 v: h: _  P! c. w- s3 M
</tr>
8 v! \6 }( D) U, k+ k* _</tbody>6 F, E, k) Q1 W; y! x1 y
</table>
& g6 J) Z: [, g. S<h2>四、进阶实战:VSTACK 搭配其他函数,实现「拼+整理」一站式搞定</h2>$ s; h1 x; J/ T& S! k8 g& _6 @* i
<p>VSTACK 不只能拼数据,还能和其他简单函数搭配,一次性完成「筛选→拼接→去重→排序」,不用多步操作。下面每个技巧都讲清「场景+公式+逐句解释+结果」。</p>
; g5 W  @; W" |3 {  C/ R' d<h3>技巧1:拼完自动去重(避免重复数据)</h3>
! z& w4 P4 _. p( G4 E; v<p>场景:两份名单里有重复数据(比如名单1和名单2都有「103 王五」),拼完想自动删掉重复行。</p>- T/ ]7 C4 ^( v, O5 \4 ?  [
<p>公式:<code>=UNIQUE(VSTACK(A1:B2, D1:E2))</code></p>
0 b2 L  z4 r, B; V' D1 B9 `<p>逐句解释:</p>
1 P6 n$ Y8 j7 @  [: W<ol>
$ \$ @) t1 Z. |, ]<li>先执行括号里的 VSTACK(A1:B2, D1:E2):把两份数据拼在一起,得到含重复行的数组;</li>0 b# Z* ^6 E/ B4 Q' C
<li>再执行外面的 UNIQUE():把拼好的数组里的重复行删掉,只留唯一行。</li>" T2 l2 o" e* k& @9 v& T
</ol>  \' ^. d; ?" D
<p>原重复数据:</p>5 ?/ L2 B) P) j4 G: x
<p>名单1:101张三、102李四;名单2:103王五、103王五(重复)</p>! T1 a# J: u& I2 i
<p>去重后结果:101张三、102李四、103王五(只留1个)</p>
. U2 g1 Q* H2 C4 y) g<h3>技巧2:先筛选再拼接(只拼需要的数据)</h3>
5 F' d  F) e: v+ V1 s<p>场景:名单1里有空白行/无效数据(比如 A3:B3 是空的),不想把空行拼进去,想先筛掉再拼。</p># l- \0 Q: q, }, J5 g4 N6 Y4 B
<p>公式:<code>=VSTACK(FILTER(A1:B3, A1:A3&lt;&gt;&quot;&quot;), D1:E2)</code></p>
6 ?; s% Y8 l! j: Y0 E<p>逐句解释:</p>
5 Z- g+ n  q* Q" ~<ol>
4 W6 x9 v1 H4 n<li>FILTER(A1:B3, A1:A3&lt;&gt;&quot;&quot;):筛选名单1(A1:B3),只保留「A列(ID)不是空」的行(A1:A3&lt;&gt;&quot;&quot; 就是「ID列非空」的意思);</li>' R* a, l( G5 k1 J9 m7 K4 J; }
<li>VSTACK(筛选后的名单1, 名单2):把筛掉空行的名单1和名单2拼在一起。</li>/ c* d9 q9 t+ T" v
</ol>
$ k' s- _: @8 k/ R  Z$ D<p>补充:如果想筛选「特定条件」的数据(比如只拼 ID 大于102的员工),把筛选条件改成 A1:A3&gt;102 就行,公式:<code>=VSTACK(FILTER(A1:B3, A1:A3&gt;102), D1:E2)</code></p>; y* \9 ^- Z. z, ^, L0 E
<h3>技巧3:多条件筛选后拼接(更精准)</h3>
' O# N7 K- Y% f! o& ~, O<p>场景:想从名单1和名单2里,各筛选出「ID&gt;101 且 姓名含“六”」的员工,再拼在一起。</p>
- {9 p4 U0 |0 U) L) M<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>* f) l0 H) k* _" T" w2 }; A  Z
<p>逐句解释:</p>
% Z, M, a; D3 R3 ^) C1 |<ol>0 z. @+ `6 W3 L7 S+ q4 O
<li>(A1:A2&gt;101):条件1:ID大于101;</li>. q1 b5 J8 ^) [# ?2 T7 `
<li>ISNUMBER(SEARCH(&quot;六&quot;, B1:B2)):条件2:姓名里含“六”(SEARCH(&quot;六&quot;, B1:B2) 找姓名里的“六”,ISNUMBER 把找到的结果变成「是/否」);</li>
2 \1 L& t, N, ?5 q<li>两个条件用 * 连接:表示「同时满足两个条件」(相当于“并且”);</li>
1 \4 _8 ?) O4 ~6 S) n. l7 Z' v9 |6 ^" U<li>分别筛选名单1和名单2后,再用 VSTACK 拼接。</li>
' t4 `% @7 l  H( q% {3 b</ol>8 t" R- }8 y7 F
<h3>技巧4:拼完自动排序(不用手动整理)</h3>2 |5 d$ V7 z1 |1 V  {; w
<p>场景:拼完的名单是乱序的,想按 ID 从大到小/从小到大自动排序。</p>
' L3 B6 E! e2 v<p>公式(按 ID 降序,从大到小):<code>=SORT(VSTACK(A1:B2, D1:E2), 1, -1)</code></p>
* u) b: w8 F+ u  C# b<p>逐句解释:</p>1 i4 q$ E2 f8 w% B) ?& J/ A/ f
<ol>
8 n; i# y9 Y& b3 b5 r# h% q, `<li>+ P5 `2 C' Z# I' A5 K$ b- r
<p>VSTACK(A1:B2, D1:E2):先把两份数据拼好;</p>
  ?9 j: x5 f  v* v</li>
. L( n# Z$ y5 s& U: y<li>( E6 P- \) y$ ?3 r
<p>SORT(拼好的数组, 1, -1):给拼好的数组排序;</p>  ?' U* U* I8 E9 w9 g" q
<ul>
& C  W6 m. }! u<li>1:按第1列(ID列)排序;</li>
. b3 r3 x1 o7 d! a3 z- _5 \; t<li>-1:降序(从大到小);如果想升序(从小到大),把 -1 改成 1 就行。</li>
( S: Y) x5 G( x5 `# J+ C</ul>
" H) {# o! q) _9 r7 `( i- ]</li>
) E6 |$ t  u* [* v; @2 {</ol>
9 ^" J3 n2 T; I8 P3 R4 x2 G/ _. W<p>例子结果:拼好的原数据是 101、102、103、104,降序后变成 104、103、102、101。</p>
- _0 B* w  `( s2 ]5 {<h3>技巧5:跨工作表拼接(拼不同 sheet 的数据)</h3>
5 i% k6 r5 q& D3 h<p>场景:你的数据分散在两个工作表里(比如「Sheet1」有名单1,「Sheet2」有名单2),想把它们拼在一起。</p>
! R& a3 F2 E9 \% L3 M4 Y1 I2 U5 n<p>公式:<code>=VSTACK(Sheet1!A1:B2, Sheet2!A1:B2)</code></p>: I8 S- b( Z  _4 Y! l7 B9 {
<p>关键细节:</p>$ j7 N9 t+ p' c2 R
<ul>( ?: H# [6 T) w& I) C9 O8 ^
<li>跨表引用格式:「工作表名!单元格区域」(比如 Sheet1!A1:B2 就是「Sheet1工作表的A1到B2区域」);</li>
% k; k# {7 B  ~<li>如果工作表名有空格(比如「销售部名单」),要给工作表名加单引号:<code>=VSTACK('销售部名单'!A1:B2, '技术部名单'!A1:B2)</code>;</li>
/ W( `7 z9 n4 s( g' `<li>注意:两个工作表的数据列数要尽量一致,不然会补 #N/A(可以用前面讲的 IFERROR 处理)。</li>
: v/ l9 Z- f9 k  A</ul>
$ q1 k0 w& i' i& |& K7 Q<h3>技巧6:跨工作簿拼接(拼不同 Excel 文件的数据)</h3>
, S: z  v' ]! v. r<p>场景:数据在两个不同的 Excel 文件里(比如「2024员工名单.xlsx」和「2025员工名单.xlsx」),想跨文件拼接。</p>
: J) Y2 Z) x: D7 {, P' X# v<p>公式:<code>=VSTACK([2024员工名单.xlsx]Sheet1!A1:B2, [2025员工名单.xlsx]Sheet1!A1:B2)</code></p>' V; U" x* Y. ^3 s  K
<p>关键注意事项:</p>: t1 Q3 u6 t7 |; `6 q
<ul>9 A+ ]( i' H( c
<li>跨工作簿引用格式:「[工作簿文件名.xlsx]工作表名!区域」;</li>
5 S4 X3 y/ W3 r2 V: k<li>必须打开这两个工作簿,公式才能正常用;如果关闭了,会显示 #REF! 错误;</li>- n  @7 k$ @5 b: e
<li>如果工作簿文件路径有特殊字符(比如空格、中文),要给路径加单引号,比如:<code>=VSTACK('D:\工作文件\2024员工名单.xlsx'!A1:B2, 'D:\工作文件\2025员工名单.xlsx'!A1:B2)</code>。</li>' E: C' g8 H# L, n) G& m
</ul>) ?1 C6 |  K8 a" L5 F) z' [. Q3 F* q
<h3>技巧7:动态数据源拼接(数据新增自动更新)</h3>
' y/ E% m' q$ V8 R<p>场景:你的名单会不断新增数据(比如每月加新员工),想让拼接结果自动包含新数据,不用每次改公式。</p>2 L" X% [2 C9 z- Z
<p>方法:先把数据源变成「表格对象」,再用 VSTACK 拼接。</p>
- }' a* P: x* w0 w# L% G& O<p>具体步骤:</p>
9 J, F; w+ [1 ^. m' ^" k4 h- [1 Q8 M<ol>% S, M) I& e- ~# a$ K
<li>选中名单1的数据区域(A1:B2),按 Ctrl+T,勾选「我的表格有标题」,点击「确定」——这样就把 A1:B2 变成了表格(默认叫 Table1);</li>
( x" @! M" K: b3 `' N1 T<li>用同样的方法把名单2(D1:E2)变成表格(默认叫 Table2);</li>
. i4 x4 j" d$ U4 p0 q& V( F<li>输入拼接公式:<code>=VSTACK(Table1, Table2)</code>。</li>( h6 V  u, J7 m: G
</ol>
* {5 g+ f6 x2 c, j* `  U  P<p>效果:以后给 Table1 或 Table2 新增行(比如在 Table1 下面加 105 孙七),拼好的结果会自动包含这行新数据,不用改公式!</p>9 `& f9 R" p' T& a9 {; n% o, M, l; w5 o
<h3>技巧8:用 LET 函数简化长公式(进阶必备)</h3>
7 c8 G+ F# R+ ~4 O7 h" R8 M* w) O<p>场景:如果公式又长又复杂(比如同时包含筛选、去重、排序、拼接),写起来容易错,还不好改。可以用 LET 函数给中间结果起名,简化公式。</p>
$ y% O7 c4 R& B6 C; C/ W<p>例子:筛选名单1(ID&gt;101)、筛选名单2(ID&gt;101),拼接后去重、排序。</p>
9 P+ T3 }$ R/ z3 A6 h<p>原来的长公式:<code>=SORT(UNIQUE(VSTACK(FILTER(A1:B2, A1:A2&gt;101), FILTER(D1:E2, D1:D2&gt;101))), 1, -1)</code></p>
: r% {5 T7 @: A' h<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>; `! m, F+ L2 P
<p>逐句解释:</p>
) L2 M( P2 ~* N2 A8 U/ i1 g6 h<ol>7 v$ A3 r8 s$ p9 b
<li>LET 的作用:给中间步骤起名,后面直接用名字引用,不用重复写公式;</li># m3 z- P/ d, f& a# A4 P0 @; W
<li>筛选1=FILTER(...):给「筛选名单1」的结果起名叫「筛选1」;</li>$ O4 C2 s/ R: d" r7 R( O# P
<li>筛选2=FILTER(...):给「筛选名单2」的结果起名叫「筛选2」;</li>
5 {, u( A) ~  I9 x( S+ H  Y<li>拼接=VSTACK(...):给「拼接筛选1和筛选2」的结果起名叫「拼接」;</li>
8 ?' \  ^4 W9 J- k! H4 m9 b<li>去重=UNIQUE(...):给「去重拼接结果」起名叫「去重」;</li>9 E' v  b% F  o  e8 t* B
<li>排序=SORT(...):给「排序去重结果」起名叫「排序」;</li>
* E! ~# R3 h6 k5 F: z" G! t<li>最后一个「排序」:表示最终要显示的结果是「排序」步骤的结果。</li>
8 h# j  U. u' i" ^2 j1 j</ol>
4 ?) {6 Q: D: E  b3 Z$ r<p>优势:以后想改筛选条件(比如把 ID&gt;101 改成 ID&gt;102),只要改「筛选1」和「筛选2」里的条件就行,不用在长公式里找半天。</p>; o. G  u+ d+ r1 k# i: c
<h2>五、常见踩坑:公式报错了?这样解决!</h2>
6 n5 D4 ^9 m8 T<h3>1. 出现 #SPILL! 错误(最常见)</h3>" r' ~' m: s2 P2 U, `# ]5 l; ?
<p>原因:你输入公式的单元格下面/右边有别的内容(比如文字、数字、其他公式),挡住了拼好的数据要占的格子(Excel 叫「溢出区域被阻挡」)。</p>
4 Y8 [. Y3 j/ a+ u  J<p>解决:</p>
1 I2 a0 P$ ~" E5 R9 ^<ul>
  _9 ]* O: x# e: q<li>方法1:把挡住的格子清空(比如公式输在 G1,就清空 G1 下面、右边所有有内容的格子);</li>4 l: _. A& s# q; V0 y. q6 W
<li>方法2:换一个「下面、右边都空着」的单元格输公式(比如最右边的空白列)。</li>
/ q5 S* l. G7 |3 s' M$ F</ul>& q- ]2 Y; p. l9 Z0 i- [
<h3>2. 合并单元格导致拼出来乱套</h3>: r# z) Q4 |% [' n
<p>原因:要拼的数据里有合并单元格(比如把 A1 和 B1 合并成一个单元格),Excel 认不出合并后的区域,会导致拼接结果错位。</p>
' P2 T8 A0 Z1 z2 Z<p>解决:先取消合并单元格(选中合并的单元格,点击顶部「开始」选项卡→「合并后居中」→「取消合并」),再拼数据。</p>1 }4 t, d' A3 I2 w2 |; J
<h3>3. 数据类型不匹配(比如数字变文本)</h3>$ W5 ]3 S. G! E/ ~/ d6 c
<p>原因:要拼的几份数据里,同一列的格式不一样(比如名单1的 ID 是「数字格式」,名单2的 ID 是「文本格式」),拼完后可能出现排序错乱、计算错误。</p>- C" Z" B  Z  z; j8 k( H$ }
<p>解决:把两列的格式改成一样的:</p>
( |$ V" m& C1 c, Q<ul>
  |2 ?7 k2 j  `6 U9 h9 g, A<li>选中要改的列(比如名单2的 D 列);</li>& v* H3 n; |0 x
<li>点击顶部「开始」选项卡→「数字格式」下拉框;</li>
9 s0 V$ N/ v3 t- m<li>选择和名单1一致的格式(比如「数字」)。</li>
4 A; S; T7 T/ S2 R# `7 ?</ul>
* I1 L, \% Y4 a4 W$ T$ }<h3>4. 跨工作簿拼接报错 #REF!</h3>
) r* i! r5 h6 L. ~: o! w( F<p>原因:引用的工作簿没打开,或者文件路径变了(比如把文件从 D 盘移到了 E 盘)。</p>$ c2 u6 n" w7 I, r  _& [: m' A
<p>解决:</p>( D- X1 s! }9 v
<ul>
& C' Z: }4 B6 ?* N! k4 J<li>先打开引用的所有工作簿;</li>8 n' P! ]3 X# N  ?. T. U' D$ J
<li>如果文件路径变了,重新写公式,重新选择数据区域(别手动改路径,容易错)。</li>
: F2 N* m' m% @) T* w5 w( G</ul>& K1 f4 M7 H4 ?1 S
<h3>5. 大数据量拼接卡顿</h3>
: m* D, |- }  [<p>原因:要拼的数据总行数超过10万行,或者嵌套了太多函数(比如多层筛选+去重+排序),Excel 计算压力大。</p>% E! T) o* S3 _; w6 t
<p>解决技巧:</p>  q. q9 I8 x. y  b6 q9 x, s
<ul>5 `2 t* ]1 H4 m) I! a$ O; D
<li>先把分散的数据源整理到同一工作表,减少跨表/跨文件引用;</li>
0 F: C" ~' _% p: G% |<li>先筛选再拼接,减少要拼的数据量(比如先筛掉无效数据,再拼);</li>
/ v6 E  l, @3 t<li>关闭暂时不用的其他 Excel 文件,释放内存。</li>' z% o( c7 E6 y5 {3 R  v
</ul>$ X0 P8 c# p, I% w: k
<h2>六、总结:VSTACK 就是「垂直拼接懒人神器」</h2>: ]) C5 ?+ `3 n# h& [* K
<p>记住3个核心点:</p>$ A* H4 U4 i$ F% a8 b4 V
<ol>1 v! n! i2 M/ M2 h( B
<li>核心功能:只做「上下拼数据」(垂直堆叠),想左右拼找 HSTACK;</li>
6 N: x7 B" H! `. {<li>新手用法:公式=VSTACK(数据1, 数据2),输在空白单元格,按回车就出结果;</li>$ B& n! ?7 `* b8 h
<li>进阶用法:搭配 FILTER(筛选)、UNIQUE(去重)、SORT(排序)、LET(简化公式),实现「筛选-拼接-整理」一站式搞定,还能动态更新。</li>
, a! K  c/ t; O( T- T</ol>% @( _- H  F: }9 F) H9 g" t
<p>最后一句话:只要你想把多份数据「从上到下摞起来」,不管是简单拼接还是复杂整理,找 VSTACK 准没错!</p>0 _' w, w$ U+ T  x+ p4 F% G
<blockquote>
2 p; H5 C8 L% h* f- O+ _. A7 M$ C<p>(注:学好Excel必须要上手练习才行,不要一看就会,上手就废!!!)</p>
8 c% r! a( p4 `, q</blockquote>
8 O" U$ Q1 g" N* b
4ea900de1fdbb8de8872074437d1daa5.gif
匠心独运,千锤百炼,品质非凡。
回复 转播

使用道具 举报

回复

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

本版积分规则

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