再也不用熬夜手动复制粘贴,收表半小时,合并10秒钟
那会,月底收了32个门店的销售日报表,手动挨个复制粘贴合并到总表,熬到凌晨3点,还漏了2个门店的数据,报表交上去被总监打回重改,差点扣了全勤奖。
有没有跟我当年一样,收了一堆工作表要合并,熬到眼瞎还总出错的?评论区扣1我看看!
说真的,我之前总觉得VBA是程序员才玩得转的东西,直到我自己踩了无数坑才发现,咱们普通职场人,根本不用懂什么编程逻辑,会复制粘贴,改一两个参数,就能把别人大半天的活,10秒搞定。就拿这个【Excel多表一键合并】来说,我这套踩了5年坑磨出来的代码,你哪怕是第一次碰Excel的纯小白,跟着我一步一步来,别说几十张表,上百张表也能一键合并完,连格式都给你带得明明白白。
保姆级操作步骤,我就坐在你旁边手把手教
操作前一定要先备份你的原始Excel文件!
这里一定要注意!我当年就是头铁没备份,代码跑错把原始表数据弄混了,找了一天都没恢复,哭都没地方哭。听我的,先另存一份文件再操作,稳赚不赔!
第一步:先做好2个准备工作,零出错的前提
把所有要合并的工作表,全都放到同一个Excel文件里,别散在各个文件夹里,小白就先这么做,够用90%的职场场景
保证所有要合并的分表,表头的内容、列数、前后顺序完全一模一样
这里一定要注意!我当年就是有两个门店的表,把“销售额”和“回款额”的列顺序换了,合并出来的数据全串了,白熬了半宿。
第二步:1秒调出代码窗口
不用去点那些花里胡哨的菜单,小白就按快捷键,绝对不会错。你直接按住键盘上的 Alt+F11 两个键,代码窗口一下就弹出来了。
别慌,这个窗口看着复杂,咱们只用点两下,别的地方碰都不用碰,完全不用怕。
第三步:插入放代码的模块
在弹出来的窗口左边,能看到你正在用的这个Excel文件的名字对吧?你对着这个名字右键,依次选【插入】→【模块】,就会出来一个空白的写字板,咱们待会把代码直接粘到这里就行。
这里一定要注意!一定要右键点你当前正在用的这个工作簿的名字,别点到别的打开的Excel文件!我当年就是眼瞎点错了,代码粘进去跑半天没反应,傻呵呵找了半小时问题!
第四步:粘贴代码,只改3个地方
接下来,把下面我给你们写好的完整代码,全选复制,粘到刚才那个空白的写字板里就行。
重点来了!整个代码,你只用改中间我标出来的3个地方,别的地方一个字都不用动,哪怕你连26个字母都认不全,也能改对!
Sub 一键合并全部门工作表()
' 这一行是给这个功能起个名字,叫一键合并全部门工作表,你不用改
Dim 总表 As Worksheet, 分表 As Worksheet
' 这一行是提前占好总表和分表的位置,你不用管,不用改
Dim 表头行数 As Long, 分表数据起始行 As Long, 总表最后一行 As Long
' 这一行是提前设置好关键数字的位置,你只用改下面的数字就行
' ========== 这里是小白唯一需要改的地方!别的一个字都别动!==========
表头行数 = 1 ' 这里填你的表头占几行,一般都是1行,就写1
分表数据起始行 = 2 ' 这里填分表里的工资数据从第几行开始,表头1行就写2
是否保留表头 = True ' 这里填True就是总表只留1次表头,填False就是不留表头,一般填True
' ==============================================================
' 这一行是关闭屏幕刷新,运行再多表也不会卡,你不用改
Application.ScreenUpdating = False
' 这一行是先删掉之前生成的总表,避免重复出错,你不用改
On Error Resume Next
Application.DisplayAlerts = False
Sheets("合并总表").Delete
Application.DisplayAlerts = True
On Error GoTo 0
' 这一行是新建一个叫“合并总表”的工作表,专门放合并后的数据,不用改
Set 总表 = Sheets.Add(Before:=Sheets(1))
总表.Name = "合并总表"
' 这里是循环遍历每一个分表,把数据挨个复制过来,你不用懂原理,不用改
For Each 分表 In ThisWorkbook.Sheets
' 这一行是跳过咱们刚建的总表,不会把总表自己合并进去,不用改
If 分表.Name <> 总表.Name Then
' 这里是给总表放表头,只放一次,不会重复,你不用改
If 总表.Cells(1, 1) = "" And 是否保留表头 = True Then
分表.Rows("1:" & 表头行数).Copy 总表.Cells(1, 1)
End If
' 这一行是自动找到总表最后一行数据的位置,接着往下贴,绝对不会覆盖,不用改
总表最后一行 = 总表.Cells(总表.Rows.Count, 1).End(xlUp).Row + 1
' 这一行是把分表里的所有有效数据复制到总表里,不用改
分表.UsedRange.Offset(分表数据起始行 - 1).Copy 总表.Cells(总表最后一行, 1)
End If
Next 分表
' 这一行是复制完自动取消选中状态,不会留那个烦人的虚线框,不用改
Application.CutCopyMode = False
' 这一行是恢复屏幕刷新,你不用改
Application.ScreenUpdating = True
' 这一行是给你弹个提示,告诉你合并完了,还会告诉你合并了多少个表,不用改
MsgBox "恭喜!全部工作表已经合并完成!一共合并了" & ThisWorkbook.Sheets.Count - 1 & "个分表", vbInformation, "搞定啦"
End Sub
给你们举个例子,一看就会,绝对不会错:
如果你的表头占了2行,就把【表头行数】改成2,【分表数据起始行】改成3
如果你不需要总表留表头,就把【是否保留表头】改成False
就这么简单,改完就完事了,别的地方一个字都不用动。
第五步:一键运行,10秒搞定
改完之后,你直接按键盘上的 F5键,或者点窗口上面那个绿色的小三角运行按钮,就搞定了!
等弹出【搞定啦】的提示框,你就可以关掉代码窗口,回到Excel里,就能看到最前面自动生成了一个叫【合并总表】的工作表,所有分表的数据都整整齐齐合并好了,连原来的格式都给你带过来了,根本不用再调!
说真的,我见过太多小伙伴,收了十几个部门、几十个门店的表,一个一个复制粘贴,不仅熬大夜,还特别容易漏表、错行,到最后核对数据核对到崩溃。其实咱们做办公的,真的不用死磕手动操作,学会用【VBA批量合并工作表】这种小工具,10秒搞定别人大半天的活,剩下的时间喝杯奶茶摸鱼不香吗?
新手必看!我当年踩过的坑&报错全解决
大白话解决:这是Excel怕有病毒,默认把宏关了。你关掉代码窗口,回到Excel,点【文件】-【另存为】,保存类型选 启用宏的工作簿(.xlsm格式)*,存好之后关掉文件重开,再按步骤运行就可以了。
踩坑提醒:我当年就是存成了普通的xlsx格式,关了再开代码全没了,一定要存xlsm格式!
大白话解决:99%的情况是你改数字改错了!铁则记死:分表数据起始行=表头行数+1,比如你表头占2行,数据起始行就必须是3,别瞎改别的数字,就不会出这个错。还有一种情况是你已经有一个叫“合并总表”的隐藏表,取消隐藏删掉它再运行就行。
大白话解决:肯定是你的分表里有隐藏的空行!你先去每个分表里,把数据下面的空行全删掉,保证每个分表里,除了表头和有效数据,没有多余的空行,再运行一次就好了。我当年就是有几个分表,不小心在数据下面敲了个空格,合并出来一堆空行,找了半天才发现。
大白话解决:超简单!你把不想合并的工作表,先右键点【移动或复制】,移到这个工作簿外面,或者直接右键隐藏起来,运行代码的时候就会自动跳过,合并完再移回来/取消隐藏就行,不用改代码!
大白话解决:绝对是你的分表表头不一样!要么是列数不一样,要么是列的顺序不一样,要么是表头的名字不一样。你先把所有分表的表头,统一成和第一个分表完全一模一样的,列数、顺序、内容全对上,再运行就绝对不会串了。我当年就是踩过这个坑,被总监骂了一顿,印象深刻到现在。
今天的保姆级教程到这就结束啦,这套完整的合并代码,还有我给你们准备好的多表合并模板练习文件,我都给你们整理好了。
关注我,后台回复【VBA小项目】就能直接抱走,复制粘贴就能用。
有什么操作上的问题,或者想要的别的办公技巧,都可以评论区告诉我,我每条都会回。咱们下期见,少加班,多摸鱼!