乐于分享
好东西不私藏

Excel多表合并不用愁!自用优化版VBA,一键搞定(附完整VBA代码)

Excel多表合并不用愁!自用优化版VBA,一键搞定(附完整VBA代码)

      做数据岗、行政岗的朋友,肯定都踩过Excel多表合并的坑——少则三五个表,多则几十上百个,手动复制粘贴不仅熬时间,还总容易漏行、错行,改起来更费劲儿。
以前我也被这个问题困扰了很久,试过不少方法,要么操作复杂记不住,要么插件不稳定容易报错。后来自己摸索着优化了一段VBA代码,用了大半年,亲测稳定高效,今天就把这份自用教程分享给大家,新手也能轻松上手。

一、功能简介

如下图,我们有5个excel表需要合并,为方便演示,每个表里面我们列了三行数据。
如下图,当我们点击按钮后,这5个表瞬间被合并在总表里。

二、VBA完整代码

Private Sub CommandButton1_Click()
‘作者:办公必杀技 自用优化版(适配多场景数据合并,新增列宽调整、空行清除)
‘禁用屏幕刷新、警告提示,提升运行速度,避免弹窗干扰操作
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim 总表 As Worksheet
Dim 子表 As Worksheet
Dim 最后一行 As Long
‘=====================
‘ 1. 删除已存在的总表(避免重复创建报错,适配多次合并场景)
‘=====================
On Error Resume Next ‘忽略删除不存在的“总表”时的报错
Sheets(“总表”).Delete
On Error GoTo 0 ‘恢复正常报错提示,便于排查问题
‘=====================
‘ 2. 新建总表,放在所有子表后面,方便查找
‘=====================
Set 总表 = Sheets.Add(After:=Sheets(Sheets.Count))
总表.Name = “总表”
‘=====================
‘ 3. 遍历所有工作表并合并,跳过总表本身
‘=====================
For Each 子表 In Worksheets
If 子表.Name <> “总表” Then
‘获取总表最后一行的下一行,避免数据重叠
最后一行 = 总表.Cells(总表.Rows.Count, 1).End(xlUp).Row + 1
‘=====================
‘ 核心优化:只保留第一个表的表头,其他表只复制数据
‘=====================
If 最后一行 = 2 Then
‘第一次粘贴:带表头(第一个子表的表头作为总表表头)
子表.UsedRange.Copy 总表.Cells(最后一行 – 1, 1)
Else
‘后续粘贴:跳过表头,从第二行开始复制数据
子表.UsedRange.Offset(1).Copy 总表.Cells(最后一行, 1)
End If
End If
Next 子表
‘=====================
‘ 4. 新增优化功能:自动调整列宽、清除空行,提升实用性
‘=====================
总表.UsedRange.EntireColumn.AutoFit ‘自动适配列宽,不用手动拖拽
On Error Resume Next
总表.UsedRange.SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp‘清除合并后产生的空行
On Error GoTo 0
‘=====================
‘ 5. 恢复设置并弹窗提示,告知合并结果(新增合并数量统计,更直观)
‘=====================
Application.ScreenUpdating = True
Application.DisplayAlerts = True
MsgBox “合并完成!” & vbCrLf & “已合并工作表数量:” & Worksheets.Count – 1 & vbCrLf & “已自动调整列宽、清除空行,可直接使用!”
End Sub

三、代码解读

如上图,我们第1、2段代码的主要功能是删除旧的总表,新建新的总表
如上图,第3段代码的主要功能是通过FOR循环,将所有子表的数据复制到总表。
如上图,第4段的主要功能是自动调整总表的列宽,并清除合并后产生的空行。很多新手运行代码时会遇到「运行时错误 ‘1004’:未找到单元格」,这是因为当总表没有空白单元格时,SpecialCells方法会触发报错。我在代码中加入了On Error Resume Next容错处理,彻底解决了这个问题,就算没有空行也能正常运行,不用手动修改代码。
如上图,第5段代码的主要功能是恢复之前关闭的excel刷新及弹窗功能,弹窗提示“合并完成!”及合并工作表数量。

四、总结

以上就是我自用大半年的Excel多表合并VBA教程,不管是3个表、5个表,还是几十上百个表,只要复制这段优化版代码,插入命令按钮,点击一下,瞬间就能完成合并,再也不用手动复制粘贴耗时间、犯错误。
建议大家收藏本文,下次需要合并表格时直接查找,省去重复找代码、改代码的麻烦;也可以转发给经常处理Excel数据的同事、朋友,帮大家提升工作效率,告别数据合并的烦恼~
如果运行过程中遇到报错、表头错乱、数据遗漏等问题,评论区留言,我会一一回复解答,帮你顺利搞定多表合并,新手也能轻松上手!