作者:音子,微信公众号:自在不思量,转载请注明出处。
我最开始接触VBA是17年,从录制宏开始研究了一下如何用一个按钮代替多个连续的操作步骤。最后,代码写的虽然不怎么完美,但也成功应用了几个月,让我节省了不少时间。
但这篇不是讲怎么写VBA代码。
实际上,VBA早已经从我的学习名单中剔除了。可这并不妨碍我使用它~
所以,这篇先来说说如何使用VBA代码来合并表格。
先看一下完整代码吧。需要注意的是,下方这段代码的用途是合并当前文件夹内所有工作簿的全部工作表:
1 Sub 合并当前目录下所有工作簿的全部工作表() 2 3 Dim MyPath, MyName, AWbName 4 Dim Wb As workbook, WbN As String 5 Dim G As Long 6 Dim Num As Long 7 Dim BOX As String 8 9 Application.ScreenUpdating = False 10 MyPath = ActiveWorkbook.Path 11 MyName = Dir(MyPath & "\" & "*.xls") 12 AWbName = ActiveWorkbook.Name 13 Num = 0 14 15 Do While MyName <> "" 16 If MyName <> AWbName Then 17 Set Wb = Workbooks.Open(MyPath & "\" & MyName) 18 Num = Num + 1 19 With Workbooks(1).ActiveSheet 20 .Cells(.Range("B65536").End(xlUp).Row + 2, 1) = Left(MyName, Len(MyName) - 4) 21 For G = 1 To Sheets.Count 22 Wb.Sheets(G).UsedRange.Copy .Cells(.Range("B65536").End(xlUp).Row + 1, 1) 23 Next 24 WbN = WbN & Chr(13) & Wb.Name 25 Wb.Close False 26 End With 27 End If 28 MyName = Dir 29 Loop 30 Range("B1").Select 31 Application.ScreenUpdating = True 32 33 MsgBox "共合并了" & Num & "个工作薄下的全部工作表。如下:" & Chr(13) & WbN, vbInformation, "提示" 34 35 End Sub
这段代码是一位前辈分享的,很好用,我用过了无数次,帮了很多忙,但我从没仔细看过内容,因为前辈说,只要会用就行了。我很认同……
下面我举个例子来说明一下这段代码要如何使用。
假设你要收集所有班级的比赛项目报名信息,以班级为单位上交报名表。
每个班级的表格形式如下:
把所有班级的报名表放到同一个文件夹中:
新建一个工作表,并打开它:
鼠标右键点击底部工作表名称“sheet1”,在弹出的菜单中选择【查看代码】:
注:还有其他方式也能查看代码,我认为这种方式最便捷,其它的懒得讲了,感兴趣的请自行百度吧。
弹出VBA代码编辑窗口,默认状态是这样的:
将本文一开始展示的整段完整代码复制过来,并单击菜单栏中“?”按钮运行:
代码运行完毕后,弹出如下提示窗口,表示已经合并成功:
合并后的表格内容如下所示:
可以看出来,这段代码适合于待合并的各个表格中所有列的数据一致但不含有列名的情况。
像本文中举例这种情况,合并后再简单处理下就好了。首先,删除第一行空白行,然后将所有含列名的行筛选出来一次性删除:
完成~
优化这段VBA代码的工作我大概率不会去做,也许以后会研究下怎么用python实现这个操作。
本文【合并同文件夹下表格】代码分享地址
链接:
https://pan.baidu.com/s/1DwpfkevO6mZM-YneQfSMIA
提取码:
mi1k
----------------- End -----------------
原文:https://www.cnblogs.com/eternal-immortal/p/10922704.html