返回列表 发布新帖

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

310 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>. |! q; N0 b/ F8 n2 y% K4 y' w
<p>VSTACK 函数说白了就是 Excel 里的「数据叠叠乐神器」——专门帮你把好几份零散的数据,<strong>从上到下整整齐齐摞在一起</strong>。不用你手动复制、粘贴、调整格式,只要输一个公式,零散数据自动变完整列表;而且原数据改了,拼好的结果会自动跟着更,彻底解放双手!</p>
+ }& s' k4 I0 K) Z<p>下面从「新手必会基础」到「进阶实战技巧」,一步步讲透,每个步骤都标清楚,新手也能直接跟着做。</p>) S+ a* f" P( ?5 h
<h2>一、先搞懂核心:VSTACK 就干一件事——「上下拼数据」</h2>
& ~: X3 G. m& c9 U% ]2 T<p>你可以把它想象成「叠文件」:</p>
$ |: w7 d0 w7 ]! b; X( M7 \6 }<ul>5 l$ c; n6 M) y
<li>比如你有两页员工名单,第一页写着「张三、李四」,第二页写着「王五、赵六」;</li>. ]- r& d; s: j3 Q& z7 `% T
<li>VSTACK 就相当于把第二页直接放在第一页下面,变成一本完整的名单,而且不用你手动翻页、粘贴。</li>
& Y" z9 Y* e# U% [# a2 s</ul>9 w7 `. O& b8 F0 j
<p>关键特点:只管「上下拼」(垂直方向),不管左右拼(左右拼用 HSTACK,后面会提)。</p>) Z0 p# k9 C& D6 ^
<h2>二、新手必会:基础用法(3步就能上手)</h2>
% t9 s' L% b1 U2 z$ @, _<h3>第一步:记住公式的「大白话结构」</h3>
2 r7 u  @0 w* Q. a! b" u2 Q<p>公式基本写法:<code>=VSTACK(第一份要拼的数据, 第二份要拼的数据, 第三份要拼的数据...)</code></p>* C6 n, H7 ^! ^+ @
<p>解释:</p>" p  A1 Q; K- C; d" ]
<ul>
" X# T1 ^& ?  H<li>括号里用「逗号」隔开每一份数据,逗号的意思就是「先放这份,再把下一份放它下面」;</li>
6 D4 I8 H/ p7 Z<li>最少要拼2份数据(也能只拼1份,但没必要,直接复制数据就行);</li>
5 w  @7 u$ R. k2 |+ a<li>公式只需要输在「一个空白单元格」里,输完按回车,Excel 会自动把拼好的结果往下/往右填(不用手动拽公式)。</li>
+ f1 X* ~; \' Z% C</ul>+ k5 G8 I/ y2 O$ [6 X; P7 m/ I
<h3>第二步:实操例子(最常见场景:拼两份结构一样的数据)</h3>
8 G6 _* Z' K. l<p>假设你有两份员工名单,都有「ID」和「姓名」两列,分散在表格不同位置:</p>2 W4 n4 e; B1 m6 N
<p>「名单1」在 A1:B2 区域(2行2列):</p>* b" F  O& S2 ~: Q, x
<table>/ ~0 e* k+ {: U* g7 k! g# B3 R8 r
<thead>
5 l) G- S4 R3 B& l$ H. e, g$ |. A& @<tr>
. r& a) c! S. n; ]6 w<th>A列(ID)</th>
, l0 r' b  F& N# Z( X<th>B列(姓名)</th>5 a& R. b; C7 Z
</tr>$ e1 X4 ^1 k) q
</thead>6 y. H8 `: ]: [% v9 L
<tbody>' m7 P/ `; f# z; C* w. g5 u) }8 d
<tr>$ Z2 Y# O& I( y6 e; q& B3 O
<td>101</td>3 @' v# H/ C1 w
<td>张三</td>
) K2 V) b) k. U5 Q</tr>( u0 T0 T/ R/ N' Q: w/ x
<tr>
4 j. f' x0 ~9 L$ F7 S' q, r( f1 I<td>102</td>9 A! s. N# {$ }& l* C' P7 a
<td>李四</td>
: G6 r' O5 i0 o  h7 [/ P+ f4 M</tr>
5 I) S  @- ]2 g<tr>: \- I- |* w; S: Q# y- {6 b
<td>「名单2」在 D1:E2 区域(2行2列):</td>' P7 N& w$ g% T
<td></td>
: w) [6 A  @' C' `/ I( y' z</tr>
0 _5 I+ ], s- [8 z</tbody>% z9 A& |6 `) a
</table>
$ {( F+ R/ s7 }. o* A! ?<table>
  p9 ]5 u; R: n# b  I<thead>
# N! D$ H+ p- G4 V' }6 M' k<tr>
6 `+ x  L) \; {  Q  X/ F<th>D列(ID)</th>. s$ [! e& A: l0 Z+ d
<th>E列(姓名)</th>
: Y4 w; `2 h1 {! M: P( J/ x) A</tr>4 v9 u1 `% ^8 r1 v& I# k. r
</thead>& _4 C3 m6 w8 W4 l) M
<tbody>
; K8 D. ]* i# W6 X& R7 k4 G<tr>
/ n; ?$ J2 c# ]# H1 w( ?  N" i- L<td>103</td>
' O0 H/ w, T1 T8 w* y$ |<td>王五</td>8 b3 P' o5 `4 K2 W5 R3 e8 ^: ~! _
</tr>
, R- C+ X. z7 k/ X4 Z- n$ P<tr>3 X1 Y% y8 U6 c# J; ~( N1 u
<td>104</td>
3 B6 l5 W* p6 K, {<td>赵六</td>3 q# D( L4 n$ t
</tr>0 F" `9 z1 m. o0 t( D
<tr>
# h0 _  S4 O9 b- }<td>目标:把这两份名单拼在一起,变成4行2列的完整名单。</td>% F% @; ^5 z5 K+ y5 q9 k
<td></td>
! s8 k( w- a& s7 Q- m( i$ G: J' [( h</tr>" x( @; A/ s8 U. U/ A- o
</tbody>+ j% ^1 z. ^1 u9 C7 u. u
</table>% ~! d$ J/ A( i" E
<p>具体操作步骤:</p>4 B  d5 X. t) o0 I  R) T2 o
<ol>7 e- `( I6 M3 w
<li>找一个「下面、右边都空着」的单元格(比如 G1,避免挡住原数据);</li>
& W5 f. j; b( y- f3 Y$ Z& W<li>输入公式:<code>=VSTACK(A1:B2, D1:E2)</code>;</li>% p! e' g% i# ^8 w! p  v$ |
<li>按回车,结果直接出来!</li>$ ^/ \# {; m9 r, j; x0 ~4 Q
</ol>
* T; {7 V7 M# e<p>最终拼好的结果(自动从 G1 往下溢出):</p>' u& T7 L) J' j- J/ K
<table>
5 E$ P5 Z+ L2 Q# ^<thead>
9 T9 ]$ F. ]" u* M<tr>
( ]$ g- v$ F( q$ x& [2 ?+ C* r<th>G列</th>1 x" _9 I: |, ]7 c! K9 w
<th>H列</th>
0 a" N' l* d$ b</tr>  x4 d7 p& ~+ [. M' r. K7 T+ n: {4 ^
</thead>- e/ c4 Z9 u. k6 k2 S- \1 ?
<tbody>6 n7 ]2 C( I3 f  e( ?
<tr>
* W0 a# Q4 Z: Q0 {<td>101</td>
) P" x2 u4 B5 P% y1 G<td>张三</td># U) E( ~; D. L" n& s/ q. M
</tr>
' w5 ]4 O2 u# k* U2 [7 `' M<tr>* C: B: J+ [9 l" P2 b! z8 [
<td>102</td>7 y$ _; Q) [0 ?/ S& r/ E
<td>李四</td>0 n3 I4 y0 r2 X2 J9 O( Z3 m
</tr>' l; p$ p* N; }7 m0 z# S  M
<tr>
+ ?2 x2 f2 m/ P. i<td>103</td>5 Q! y. ^$ F- y8 w. X. _) P
<td>王五</td>1 g8 n! @8 N. h. r" E, t0 q
</tr>
8 N. G- ~, o" y& K/ ^<tr>' I) n+ ^5 I& o9 q: y8 m: V5 W; w$ c
<td>104</td>6 F! x6 Q1 [9 ?
<td>赵六</td>. R  u; w4 M& M- w4 E% i
</tr>
# Z% |* Z" r4 k! b2 \<tr>+ k2 z, X( I, q; }
<td>补充:如果原数据改了(比如把张三的 ID 改成 201),拼好的结果会自动跟着变,不用重新输公式!</td>
. I5 U0 y5 n! N2 ~8 s6 v<td></td>
/ N. F; o, J) h% K+ _) q& b. s</tr>
' O( P- [$ \' v# _</tbody>" T, v6 c* \5 K7 I, s5 A
</table>
  M. J5 X. L: j. g<h3>第三步:拼多份数据(3份及以上)</h3>
- \& M  y2 I0 V2 M<p>如果还有「名单3」(在 G1:H2 区域:105 孙七、106 周八),想一起拼进去,公式直接加一个参数就行:</p>8 m; h: h( r* P9 J& _3 Y
<p>公式:<code>=VSTACK(A1:B2, D1:E2, G1:H2)</code></p>
, E4 B. S4 r) O2 l! Z  T% ~<p>解释:括号里用逗号多隔一个数据区域,Excel 就会按「A1:B2 → D1:E2 → G1:H2」的顺序,从上到下依次叠放。</p>
2 I" I' j" t7 P<h2>三、关键细节:遇到「不一样宽」的数据怎么办?</h2>: |, f* K9 i8 A6 \6 h% t. R
<p>很多新手会遇到这个问题:要拼的几份数据,列数不一样(比如一份是2列,一份是1列)。别慌,Excel 会自动处理,我们只要知道怎么应对就行。</p>
* K* k6 {! Q! f6 d- v, g<h3>场景:拼2列数据和1列数据</h3>
& t* f) O2 N3 W% n7 p3 {- `! T  s<p>比如:</p>% I) X( p* @0 [9 B) r
<ul>
7 Q, T3 L) h+ k4 V( q1 j/ z0 J<li>第一份数据:A1:B2(2列:ID+姓名);</li>
) `3 {. z/ H. B3 f  I! m<li>第二份数据:F1:F2(1列:只有 ID,没有姓名,内容是 105、106)。</li>+ C* _4 h# B. e0 Z4 }" X
</ul>2 Z' v# y: i1 ~1 G5 s* M
<p>输入公式:<code>=VSTACK(A1:B2, F1:F2)</code></p>; V+ P4 ]$ Y/ _1 P- i- f% U# j6 {
<p>结果会怎么样?</p>) c% ]+ x+ M; N% `% I& ]
<p>Excel 会以「列数最多的那份数据」为标准,给列数少的数据补「空提示」——这里第二份数据少1列,所以姓名列会显示 <code>#N/A</code>(白话:这里没数据)。</p>
) C+ E4 b1 x2 Y; z: Y# b) r( i: S<table>
0 O! e+ n$ f' g9 c1 P% ~+ _<thead>
  }' S" p& S6 p, @; B) |) B<tr>* W8 Z. u7 }7 K! V! K8 k1 q6 n; N1 a
<th>ID</th>
% F4 o- X/ `/ j6 w8 n<th>姓名</th>* d/ N* L6 }  z& U( C
</tr>; Q  g! r# X3 b2 m; p1 h
</thead>7 K, {4 u" j) t4 h; _
<tbody>; t0 u, T7 X. F1 ^) \- |/ ~
<tr>
$ ~! l- r+ Z  V3 f<td>101</td>
( t( W0 G3 t9 P' v; a" I<td>张三</td>% z7 }3 C0 V9 w8 o
</tr>" T: j$ S  O3 [# ?. `0 e
<tr>0 G8 U" {( |$ f
<td>102</td>! {# C8 E0 k& @1 r) m8 V- E
<td>李四</td>
9 l4 @. ~$ X0 `$ c' H</tr>
+ |3 p- ^( G! H  v1 w, q4 ~1 C<tr>
' [$ d/ H3 i2 x/ p& P8 Z9 g7 a# ?<td>105</td>
9 b" ?6 C/ u# F- T8 v+ Z<td>#N/A</td>2 R+ }1 r4 B4 Z
</tr>( _" f- ]' `" O5 M! `
<tr>! F. ]1 Y, E7 _0 I- q
<td>106</td>$ j" }, F% b. L
<td>#N/A</td>9 n6 a9 {% k$ E+ Q9 }
</tr>0 _& }$ |: Y3 w5 o4 B1 \
</tbody>: l; r0 u) D' y: a2 s" v
</table>
9 G4 t! J0 M8 K" y. Q1 \" ]7 r2 J<h3>进阶处理:把 #N/A 换成友好提示</h3>( P$ I) [: L: t7 ^  M# `4 d, p
<p>#N/A 看起来有点丑,我们可以加个小公式「IFERROR」,把它换成「无姓名」「暂无数据」这类友好的文字。</p>3 \& O% ~# [8 t1 h8 P" Y7 \
<p>修改后公式:<code>=IFERROR(VSTACK(A1:B2, F1:F2), &quot;无姓名&quot;)</code></p># O% v+ P, |" P  l
<p>解释:</p>" X. H, l4 r* p* r! l# \
<ul>; A/ s. y7 w+ o& H6 H6 F
<li>IFERROR 的作用是「如果公式出错误(比如 #N/A),就显示后面的文字;没错误就显示正常结果」;</li>6 n" U3 v$ T8 @* v% K. _
<li>这里把 #N/A 换成了「无姓名」,结果会更直观。</li>
" k& }9 K+ s! f2 v</ul># Y6 S, w9 C0 h& W3 W
<p>优化后结果:</p>
6 W' x6 O/ E/ \& c<table>
2 A8 M+ M/ w3 y<thead>5 S& K& L) J2 h! j" Z
<tr>, t9 n8 ^* z0 R+ O, ^
<th>ID</th>
. B% G- C" Y( ?9 O: Y. Z/ Q<th>姓名</th># S& V/ m  Z  x( b
</tr>4 _( Z8 L- Q: s9 X9 w5 v  g# H
</thead>
: A9 e' I7 j- E; ^- W<tbody>
+ k0 }8 A& a+ C* O2 e, O' f<tr>
; }0 Z; W. {$ @. M' n: }- b2 W6 |* ~6 x<td>101</td>$ t+ U6 |$ A! |9 Y: @
<td>张三</td>
3 V/ J# i! }* R3 [</tr>
& i/ h1 C' L9 a/ l( R0 L3 @<tr>
- B3 I! r3 y5 b" W# e9 x. x<td>102</td>6 {& n; q& }: A+ D
<td>李四</td>+ {4 c/ n4 N# `. v  X3 [' f
</tr>
# j: G4 h0 W4 M9 w: L) |4 ]<tr>
' @2 E% r, x- u- E: `/ x<td>105</td>
' w% @" b: V" _" f<td>无姓名</td>$ {$ D5 P! y! D4 f
</tr>
' k& E; @" }; s/ z  u* |( p6 s) n' @<tr>
  l& t: K. u2 `. u3 b1 z- L% E+ c. l<td>106</td>& N4 \' G7 ]5 ~: }! a
<td>无姓名</td>3 n+ r# C/ S  G/ p
</tr>
+ s2 G1 t& W1 [9 x7 Q$ Z</tbody>
# u2 ^$ M$ y) C; V</table>
- O+ v) `4 f0 n9 R4 |+ W<h3>高级技巧:给1列数据「手动补列」再拼</h3>
4 J0 ]4 @. V- ]# R1 R<p>如果不想显示「无姓名」,而是想主动给1列数据补全列(比如给 F1:F2 的 ID 补「临时姓名」),可以用「CHOOSECOLS」函数补列,再拼。</p>
7 h+ q8 r, h& p<p>公式:<code>=VSTACK(A1:B2, CHOOSECOLS(F1:F2, 1, &quot;&quot;)</code></p>7 b/ }- M1 v4 y: I0 `
<p>解释:</p>
/ H, S' z/ O! O' ^" @<ul>& H! K) P  R% J; t, ?  v
<li>CHOOSECOLS(F1:F2, 1, &quot;&quot;):给 F 列(1列)补1列空值(&quot;&quot;),变成2列;</li>
6 r/ S" }- U+ ]<li>这样拼出来的第二份数据就是2列,不会有 #N/A 了。</li>
& t# \- ~, w/ O/ X</ul>
7 a  P4 F2 ]2 d/ ?$ H<p>结果:</p>, I; H: }7 u7 q
<table>
& p4 ]4 j7 f' a1 h<thead>& O- l; g) \; P; T$ p6 ~+ O
<tr>
$ k" ~* h  `* w, X* ?1 n<th>ID</th>8 J0 Z( C1 u  d8 m
<th>姓名</th>9 A& S: f% }3 N& c) M2 {, z  A
</tr>/ K: {5 F+ W0 H4 S- d9 C
</thead>! f. R: J2 R- P4 i
<tbody>6 d9 _) f+ h; r6 Y: I7 D
<tr>5 a. P2 D5 `, b/ C: @4 G( ?# a
<td>101</td>1 B/ n& A, ~1 N: l
<td>张三</td>1 D8 U2 ^# n* M
</tr>" |9 [8 ~1 n6 R3 E0 X) g
<tr>
% G5 o8 j  X0 C<td>102</td>
; f  X- w( l2 l& ^# Y, ]: k<td>李四</td>
: U0 |& v% y& J# d+ p</tr>5 ~7 @6 j. {+ `6 G
<tr>
! ~- y1 E4 l6 G& h<td>105</td>& q/ X) k! I, W5 P* }
<td>(空)</td>
& t. ?% y! C+ q& q9 v</tr>
& A6 N- A! s5 d4 x; D! E<tr>3 @% d. m4 L7 R
<td>106</td>
+ b& B9 A8 O- e<td>(空)</td>
' T: h3 m2 Q8 |/ a& V2 H! [0 Y6 C</tr>8 W. L1 Z! ]' ~7 S' e3 E  @% ]. c
</tbody>
$ F/ Q+ D: I" s$ R( V$ {" C</table>
" [9 Z) _- ?" f8 O5 w<h2>四、进阶实战:VSTACK 搭配其他函数,实现「拼+整理」一站式搞定</h2>; y/ |$ `" m. E- r
<p>VSTACK 不只能拼数据,还能和其他简单函数搭配,一次性完成「筛选→拼接→去重→排序」,不用多步操作。下面每个技巧都讲清「场景+公式+逐句解释+结果」。</p>
" ~2 b( A" ~0 P4 b) P<h3>技巧1:拼完自动去重(避免重复数据)</h3>& I5 X' D2 O2 m9 f$ g
<p>场景:两份名单里有重复数据(比如名单1和名单2都有「103 王五」),拼完想自动删掉重复行。</p>
& O$ I; Y( p* {& d4 V! K8 Q2 X<p>公式:<code>=UNIQUE(VSTACK(A1:B2, D1:E2))</code></p>
8 h% Z0 E/ [1 W7 M4 g<p>逐句解释:</p>
$ t- J% V$ U" P, O( K<ol>7 b+ E. V% `7 g, [4 c
<li>先执行括号里的 VSTACK(A1:B2, D1:E2):把两份数据拼在一起,得到含重复行的数组;</li>  z' [' V6 F8 x
<li>再执行外面的 UNIQUE():把拼好的数组里的重复行删掉,只留唯一行。</li># O+ h; s( G& N/ {
</ol>: m% h1 G; \( P) v7 u) Z
<p>原重复数据:</p>4 ]2 l# n0 t! p1 R
<p>名单1:101张三、102李四;名单2:103王五、103王五(重复)</p>
) `- p) R( e9 ^! _: n' w<p>去重后结果:101张三、102李四、103王五(只留1个)</p>
) e- I+ H' E. L5 U) L6 x% M) N<h3>技巧2:先筛选再拼接(只拼需要的数据)</h3>9 p8 G1 a% Z( M2 X
<p>场景:名单1里有空白行/无效数据(比如 A3:B3 是空的),不想把空行拼进去,想先筛掉再拼。</p>
5 i/ z8 e( W9 m' E, ?<p>公式:<code>=VSTACK(FILTER(A1:B3, A1:A3&lt;&gt;&quot;&quot;), D1:E2)</code></p>
( _) |. C* x) [' n* F" ^+ v+ S<p>逐句解释:</p>
! F' Y( c; R2 I$ w; E2 u* G! {. {" M5 y<ol>
  g( b2 ~  Z& W) Z  m  z% Z<li>FILTER(A1:B3, A1:A3&lt;&gt;&quot;&quot;):筛选名单1(A1:B3),只保留「A列(ID)不是空」的行(A1:A3&lt;&gt;&quot;&quot; 就是「ID列非空」的意思);</li>
, [' m6 V% R, h3 H0 w0 \! T<li>VSTACK(筛选后的名单1, 名单2):把筛掉空行的名单1和名单2拼在一起。</li>+ W. f% x$ ]+ T* ~
</ol>
6 M+ R* S* f) ?8 V# w; {' O<p>补充:如果想筛选「特定条件」的数据(比如只拼 ID 大于102的员工),把筛选条件改成 A1:A3&gt;102 就行,公式:<code>=VSTACK(FILTER(A1:B3, A1:A3&gt;102), D1:E2)</code></p>: I, f3 G. a4 l
<h3>技巧3:多条件筛选后拼接(更精准)</h3>
1 z' `- T0 R  x4 x2 [2 i<p>场景:想从名单1和名单2里,各筛选出「ID&gt;101 且 姓名含“六”」的员工,再拼在一起。</p>5 `6 [) w8 x: S6 Q/ l* \; c* G& X
<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 N/ b" W- A$ Y, r: I' x9 P% _<p>逐句解释:</p>
* F7 v/ Y. o* x6 ?<ol>
- |9 w% t7 g5 p3 H6 a<li>(A1:A2&gt;101):条件1:ID大于101;</li>9 g. ]+ Q: G. ^% A/ i
<li>ISNUMBER(SEARCH(&quot;六&quot;, B1:B2)):条件2:姓名里含“六”(SEARCH(&quot;六&quot;, B1:B2) 找姓名里的“六”,ISNUMBER 把找到的结果变成「是/否」);</li>9 `& \' \* R- ]+ w' A4 z
<li>两个条件用 * 连接:表示「同时满足两个条件」(相当于“并且”);</li>
  m5 n, v  z& J( a8 X# D<li>分别筛选名单1和名单2后,再用 VSTACK 拼接。</li>
6 [+ {0 z5 e7 [  s- F</ol>
& o3 C2 N/ Z2 ?: @<h3>技巧4:拼完自动排序(不用手动整理)</h3>
# j$ F. s1 x- I# e( D<p>场景:拼完的名单是乱序的,想按 ID 从大到小/从小到大自动排序。</p>* `% [+ l# X9 C! M& O( [4 O
<p>公式(按 ID 降序,从大到小):<code>=SORT(VSTACK(A1:B2, D1:E2), 1, -1)</code></p>
$ h, Y  f7 e9 @5 C0 T<p>逐句解释:</p>
* |% ~0 M" U2 _; Y3 l- Y9 H( Y<ol>: d: B7 V* @& {6 O0 z
<li>
( R% x; x5 ^* b% g) `' w# m6 h( b7 v9 O1 Q<p>VSTACK(A1:B2, D1:E2):先把两份数据拼好;</p>! f! R; v, z, Q8 G, N
</li>6 T& f" m  Q. f0 T; L
<li>3 ^2 L1 C" M$ G2 s) W
<p>SORT(拼好的数组, 1, -1):给拼好的数组排序;</p>
6 h( S+ N' h, J5 u<ul>/ E8 J6 P, T) b& g3 C
<li>1:按第1列(ID列)排序;</li>' _! d/ k" p1 Z& w- I
<li>-1:降序(从大到小);如果想升序(从小到大),把 -1 改成 1 就行。</li>; x8 V# Z& E/ \% y  P+ C
</ul>" H! _; \# o5 B
</li>
' M7 W3 ^3 g1 z/ q</ol>8 E. E7 G* E4 R4 d, z
<p>例子结果:拼好的原数据是 101、102、103、104,降序后变成 104、103、102、101。</p>
! ], t$ @, ]. k8 o<h3>技巧5:跨工作表拼接(拼不同 sheet 的数据)</h3>' g; \6 a1 H* z1 H, y% h$ \* H
<p>场景:你的数据分散在两个工作表里(比如「Sheet1」有名单1,「Sheet2」有名单2),想把它们拼在一起。</p>
* _5 d" i. [7 b6 b<p>公式:<code>=VSTACK(Sheet1!A1:B2, Sheet2!A1:B2)</code></p>; b% p: @0 Z2 V) }* k
<p>关键细节:</p>
6 M3 Y9 @: s- @6 J7 u( w- U<ul>; k  B1 I8 h: X. q8 N3 K
<li>跨表引用格式:「工作表名!单元格区域」(比如 Sheet1!A1:B2 就是「Sheet1工作表的A1到B2区域」);</li>$ R+ D# ?- {& B) W& k
<li>如果工作表名有空格(比如「销售部名单」),要给工作表名加单引号:<code>=VSTACK('销售部名单'!A1:B2, '技术部名单'!A1:B2)</code>;</li>
" P: @/ c9 W" D6 l0 x3 ]+ U<li>注意:两个工作表的数据列数要尽量一致,不然会补 #N/A(可以用前面讲的 IFERROR 处理)。</li>
0 c! H3 W7 e7 s5 T6 g</ul>
) _- v; [+ O, y) T: z! C<h3>技巧6:跨工作簿拼接(拼不同 Excel 文件的数据)</h3>- n  W% z" i5 j) s
<p>场景:数据在两个不同的 Excel 文件里(比如「2024员工名单.xlsx」和「2025员工名单.xlsx」),想跨文件拼接。</p>
; D2 M1 O: i* V& U& }, m4 d<p>公式:<code>=VSTACK([2024员工名单.xlsx]Sheet1!A1:B2, [2025员工名单.xlsx]Sheet1!A1:B2)</code></p>+ n3 o  p  v! J' M: \/ `
<p>关键注意事项:</p>5 x2 O2 R- A) c% E0 W
<ul>
( e/ g# V6 Z; }- [1 B, O  |  I- {<li>跨工作簿引用格式:「[工作簿文件名.xlsx]工作表名!区域」;</li>
8 p/ n$ F5 y+ L, y<li>必须打开这两个工作簿,公式才能正常用;如果关闭了,会显示 #REF! 错误;</li>) [0 |) g( G9 n9 D( G
<li>如果工作簿文件路径有特殊字符(比如空格、中文),要给路径加单引号,比如:<code>=VSTACK('D:\工作文件\2024员工名单.xlsx'!A1:B2, 'D:\工作文件\2025员工名单.xlsx'!A1:B2)</code>。</li>
3 Y# u! k1 l+ \( g) O/ g</ul>
& w: X" v9 o6 A* x<h3>技巧7:动态数据源拼接(数据新增自动更新)</h3>
6 i8 @) Y5 F3 `8 w<p>场景:你的名单会不断新增数据(比如每月加新员工),想让拼接结果自动包含新数据,不用每次改公式。</p>8 U5 r, R4 ^7 I# Q7 S7 R' X
<p>方法:先把数据源变成「表格对象」,再用 VSTACK 拼接。</p>! V' M6 p" h/ N1 y# ]$ B
<p>具体步骤:</p>8 Q  T4 D! t; h+ y6 e# W) ?8 L8 l
<ol>
+ w* F2 }4 j% _% o$ Z<li>选中名单1的数据区域(A1:B2),按 Ctrl+T,勾选「我的表格有标题」,点击「确定」——这样就把 A1:B2 变成了表格(默认叫 Table1);</li>
+ u. X* y' c% }6 j) ]* P% o& M* \<li>用同样的方法把名单2(D1:E2)变成表格(默认叫 Table2);</li>
% ?1 S4 ]* e& X( v! r% z' f  [2 i0 g<li>输入拼接公式:<code>=VSTACK(Table1, Table2)</code>。</li>
2 f; ]+ G6 t% F* L: G</ol>4 m  }' q& w. ~3 h3 r% e
<p>效果:以后给 Table1 或 Table2 新增行(比如在 Table1 下面加 105 孙七),拼好的结果会自动包含这行新数据,不用改公式!</p>
+ A2 U# I. }  E7 B4 I9 u4 c4 W<h3>技巧8:用 LET 函数简化长公式(进阶必备)</h3>" t6 N* T) `/ _1 T' G: u
<p>场景:如果公式又长又复杂(比如同时包含筛选、去重、排序、拼接),写起来容易错,还不好改。可以用 LET 函数给中间结果起名,简化公式。</p>
  L. k5 @9 d: Y5 A8 X8 g4 R; y<p>例子:筛选名单1(ID&gt;101)、筛选名单2(ID&gt;101),拼接后去重、排序。</p>
! m9 w1 Y3 u4 M, o- n4 ]3 a<p>原来的长公式:<code>=SORT(UNIQUE(VSTACK(FILTER(A1:B2, A1:A2&gt;101), FILTER(D1:E2, D1:D2&gt;101))), 1, -1)</code></p>
3 R+ H- Q/ \; ^<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>  P8 i8 U* L, @# F$ N2 t
<p>逐句解释:</p>
3 W9 O. `; E" O, L  g+ a" ~; m<ol>
4 ]# m$ l. |$ C- x" ^- j5 ~7 \<li>LET 的作用:给中间步骤起名,后面直接用名字引用,不用重复写公式;</li>
, e4 ^8 g* F, w* W& {<li>筛选1=FILTER(...):给「筛选名单1」的结果起名叫「筛选1」;</li>
  P& ~  w( c* n9 T7 R<li>筛选2=FILTER(...):给「筛选名单2」的结果起名叫「筛选2」;</li>
! b: f) K# k2 Q<li>拼接=VSTACK(...):给「拼接筛选1和筛选2」的结果起名叫「拼接」;</li>5 l, _/ M$ |# ^; n) B: ]/ r  V& y
<li>去重=UNIQUE(...):给「去重拼接结果」起名叫「去重」;</li>* @- W+ p6 z: K. R
<li>排序=SORT(...):给「排序去重结果」起名叫「排序」;</li>
+ v( F  M, R& r4 f<li>最后一个「排序」:表示最终要显示的结果是「排序」步骤的结果。</li>
' }, s2 [8 R6 W$ _0 ^5 l</ol>' f% c; Q" D5 f+ Q& K! j8 _
<p>优势:以后想改筛选条件(比如把 ID&gt;101 改成 ID&gt;102),只要改「筛选1」和「筛选2」里的条件就行,不用在长公式里找半天。</p>
3 a: K) W" E; i; D<h2>五、常见踩坑:公式报错了?这样解决!</h2>
# H  z. `: c; A<h3>1. 出现 #SPILL! 错误(最常见)</h3>
9 r( r9 P: B& Z, H- s<p>原因:你输入公式的单元格下面/右边有别的内容(比如文字、数字、其他公式),挡住了拼好的数据要占的格子(Excel 叫「溢出区域被阻挡」)。</p>
2 `/ C0 G1 R7 m$ x/ v<p>解决:</p>" |5 C0 ^1 J1 e/ `
<ul>
( }( c7 U* X4 s7 p' u( g9 K5 O3 L<li>方法1:把挡住的格子清空(比如公式输在 G1,就清空 G1 下面、右边所有有内容的格子);</li>$ i) d% u' w" U$ j7 |
<li>方法2:换一个「下面、右边都空着」的单元格输公式(比如最右边的空白列)。</li># o+ p# M0 H( a( r5 K5 F
</ul>
5 ?) d! M% q) z3 a  n$ J0 S<h3>2. 合并单元格导致拼出来乱套</h3>
. t" ?, P+ T9 Z: S7 s7 c<p>原因:要拼的数据里有合并单元格(比如把 A1 和 B1 合并成一个单元格),Excel 认不出合并后的区域,会导致拼接结果错位。</p>
' W0 g0 X+ D' |<p>解决:先取消合并单元格(选中合并的单元格,点击顶部「开始」选项卡→「合并后居中」→「取消合并」),再拼数据。</p>
; k5 K/ C$ c7 G; r& {" C/ z<h3>3. 数据类型不匹配(比如数字变文本)</h3>
: v, T0 m; Q( ]) Q<p>原因:要拼的几份数据里,同一列的格式不一样(比如名单1的 ID 是「数字格式」,名单2的 ID 是「文本格式」),拼完后可能出现排序错乱、计算错误。</p>
  g- p7 Q. y2 V+ e<p>解决:把两列的格式改成一样的:</p>
5 V4 v/ M) v* @; Y  _<ul>
# k( r, d6 o1 `. S& A<li>选中要改的列(比如名单2的 D 列);</li>  E7 a% T6 W0 ^+ Q; P, x
<li>点击顶部「开始」选项卡→「数字格式」下拉框;</li>
6 E7 o( @  l) X, `<li>选择和名单1一致的格式(比如「数字」)。</li>
' @$ d( ], l( b5 E</ul>  Z- g1 y% d: O1 X# i& b2 f
<h3>4. 跨工作簿拼接报错 #REF!</h3>* X: ]" g+ p* [/ T
<p>原因:引用的工作簿没打开,或者文件路径变了(比如把文件从 D 盘移到了 E 盘)。</p>
* G/ y0 y0 K  C# y<p>解决:</p>" r) x' D5 [0 P: ?# W: U. J/ k/ P
<ul>- b1 m  H+ X# _! G
<li>先打开引用的所有工作簿;</li>
* Q; P. h) |6 i. x9 K<li>如果文件路径变了,重新写公式,重新选择数据区域(别手动改路径,容易错)。</li>
* g" n2 ~+ K% u3 ]</ul>
' g3 j4 g, P4 \0 o) r+ ?<h3>5. 大数据量拼接卡顿</h3>9 r2 O8 E" r6 d9 }" J+ M
<p>原因:要拼的数据总行数超过10万行,或者嵌套了太多函数(比如多层筛选+去重+排序),Excel 计算压力大。</p>
6 O9 W+ i- _3 O) ]( s<p>解决技巧:</p>
- `4 @6 y, Y. k& h  z<ul>' T$ ]3 i2 |: D; y4 a4 i
<li>先把分散的数据源整理到同一工作表,减少跨表/跨文件引用;</li>
: m' G2 b* O" r5 f+ J/ p: l, u3 S<li>先筛选再拼接,减少要拼的数据量(比如先筛掉无效数据,再拼);</li>1 I3 U8 r9 B) i4 G4 ^: s
<li>关闭暂时不用的其他 Excel 文件,释放内存。</li>4 N) h( t% x  O6 U3 v
</ul>" A* Y! \; f$ v9 y4 k  \( z9 W
<h2>六、总结:VSTACK 就是「垂直拼接懒人神器」</h2>! m- y% S$ b! X, O5 D5 V, M
<p>记住3个核心点:</p>
# o! k8 ^  F% |, U<ol>
# {! }$ l& [  n% j7 ^! E* R<li>核心功能:只做「上下拼数据」(垂直堆叠),想左右拼找 HSTACK;</li>
5 K( Y4 p; F6 v<li>新手用法:公式=VSTACK(数据1, 数据2),输在空白单元格,按回车就出结果;</li>
& o7 a+ G& _, n) U. y<li>进阶用法:搭配 FILTER(筛选)、UNIQUE(去重)、SORT(排序)、LET(简化公式),实现「筛选-拼接-整理」一站式搞定,还能动态更新。</li>
) Q" c3 V. v* L0 j</ol>
5 U$ C7 ?8 i" S5 K8 I  P* _* a<p>最后一句话:只要你想把多份数据「从上到下摞起来」,不管是简单拼接还是复杂整理,找 VSTACK 准没错!</p>8 K' d9 D+ t, P8 _9 [2 ^  d6 v
<blockquote>
, T' k, C( s7 n4 }0 ~! {  Y! i5 Q<p>(注:学好Excel必须要上手练习才行,不要一看就会,上手就废!!!)</p>
0 g/ K, Q1 q( e7 y$ L2 P* S</blockquote>$ ?1 w. U) y# q
4ea900de1fdbb8de8872074437d1daa5.gif
匠心独运,千锤百炼,品质非凡。
回复 转播

使用道具 举报

回复

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

本版积分规则

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