Excel多表合并不用愁!自用优化版VBA,一键搞定(附完整VBA代码)
做数据岗、行政岗的朋友,肯定都踩过Excel多表合并的坑——少则三五个表,多则几十上百个,手动复制粘贴不仅熬时间,还总容易漏行、错行,改起来更费劲儿。以前我也被这个问题困扰了很久,试过不少方法,要么操作复杂记不住,要么插件不稳定容易报错。后来自己摸索着优化了一段VBA代码,用了大半年,亲测稳定高效,今天就把这份自用教程分享给大家,新手也能轻松上手。一、功能简介
如下图,我们有5个excel表需要合并,为方便演示,每个表里面我们列了三行数据。如下图,当我们点击按钮后,这5个表瞬间被合并在总表里。二、VBA完整代码
Private Sub CommandButton1_Click()'作者:办公必杀技 自用优化版(适配多场景数据合并,新增列宽调整、空行清除)'禁用屏幕刷新、警告提示,提升运行速度,避免弹窗干扰操作Application.ScreenUpdating = FalseApplication.DisplayAlerts = False' 1. 删除已存在的总表(避免重复创建报错,适配多次合并场景)On Error Resume Next '忽略删除不存在的“总表”时的报错On Error GoTo 0 '恢复正常报错提示,便于排查问题Set 总表 = Sheets.Add(After:=Sheets(Sheets.Count))For Each 子表 In Worksheets最后一行 = 总表.Cells(总表.Rows.Count, 1).End(xlUp).Row + 1' 核心优化:只保留第一个表的表头,其他表只复制数据'第一次粘贴:带表头(第一个子表的表头作为总表表头)子表.UsedRange.Copy 总表.Cells(最后一行 - 1, 1)子表.UsedRange.Offset(1).Copy 总表.Cells(最后一行, 1)' 4. 新增优化功能:自动调整列宽、清除空行,提升实用性总表.UsedRange.EntireColumn.AutoFit '自动适配列宽,不用手动拖拽总表.UsedRange.SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp'清除合并后产生的空行' 5. 恢复设置并弹窗提示,告知合并结果(新增合并数量统计,更直观)Application.ScreenUpdating = TrueApplication.DisplayAlerts = TrueMsgBox "合并完成!" & vbCrLf & "已合并工作表数量:" & Worksheets.Count - 1 & vbCrLf & "已自动调整列宽、清除空行,可直接使用!"三、代码解读
如上图,我们第1、2段代码的主要功能是删除旧的总表,新建新的总表如上图,第3段代码的主要功能是通过FOR循环,将所有子表的数据复制到总表。如上图,第4段的主要功能是自动调整总表的列宽,并清除合并后产生的空行。很多新手运行代码时会遇到「运行时错误 '1004':未找到单元格」,这是因为当总表没有空白单元格时,SpecialCells方法会触发报错。我在代码中加入了On Error Resume Next容错处理,彻底解决了这个问题,就算没有空行也能正常运行,不用手动修改代码。如上图,第5段代码的主要功能是恢复之前关闭的excel刷新及弹窗功能,弹窗提示“合并完成!”及合并工作表数量。四、总结
以上就是我自用大半年的Excel多表合并VBA教程,不管是3个表、5个表,还是几十上百个表,只要复制这段优化版代码,插入命令按钮,点击一下,瞬间就能完成合并,再也不用手动复制粘贴耗时间、犯错误。建议大家收藏本文,下次需要合并表格时直接查找,省去重复找代码、改代码的麻烦;也可以转发给经常处理Excel数据的同事、朋友,帮大家提升工作效率,告别数据合并的烦恼~如果运行过程中遇到报错、表头错乱、数据遗漏等问题,评论区留言,我会一一回复解答,帮你顺利搞定多表合并,新手也能轻松上手!