合并当前文件夹下的所有Excel文件(VBA版)
问题很多,解决的方法很多,对于合并当前文件夹下的所有Excel文件,我之前分享是使用Python的第三方库Pandas来解决的。
“人生苦短,我用Python”说的就是Python简洁高效的特点。当然即便是每天跟数据打交道的人,也不一定人人都会Python,这里我再分享一种通用一点的方法,使用Excel自带的VBA。
还拿上次需要合并的各班级成绩Excel表为例,在需要合并Excel工作表的文件夹中新建一个Excel文件,命名为“合并.xlsx”,打开该文件,在Visual Basic编辑器中插入模块,将下面的VBA代码粘贴进去。
Sub 合并()
Dim MyPath, MyName, AWbName
Dim Wb As Workbook, WbN As String
Dim i As Long
Dim Num As Long
Dim BOX As String
Application.ScreenUpdating = False '关闭屏幕更新
MyPath = ActiveWorkbook.Path '获取当前工作簿的文件位置
'获取文件夹下的所有以“.xls”结尾的文件,根据实际情况可改成“.xlsx”
MyName = Dir(MyPath & "\" & "*.xls")
AWbName = ActiveWorkbook.Name '获取当前工作簿的名称
Num = 0
Do While MyName <> ""
If MyName <> AWbName Then
Set Wb = Workbooks.Open(MyPath & "\" & MyName)
Num = Num + 1
With Workbooks(1).ActiveSheet
'写入Excel文件名,如果文件为“.xlsx”格式,这里的“减 4”改为“减 5”
.Cells(.Range("A65536").End(xlUp).Row + 2, 1) = Left(MyName, Len(MyName) - 4)
'写入Excel文件内容
For i = 1 To Wb.Sheets.Count
Wb.Sheets(i).UsedRange.Copy .Cells(.Range("A65536").End(xlUp).Row + 1, 1)
Next
WbN = WbN & Chr(13) & Wb.Name
Wb.Close False
End With
End If
MyName = Dir
Loop
Range("A1").Select
Application.ScreenUpdating = True '恢复屏幕更新
MsgBox "共合并了" & Num & "个工作簿。如下:" & Chr(13) & WbN, vbInformation, "提示"
End Sub
运行宏,即可得到合并后的结果:
- 本文链接:http://notesth.com/merge-all-excel-files-under-the-current-folder-by-vba.html
- 版权声明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。
文件夹下的表都被打开了复制了,但是没有粘贴到当前工作簿中,这是为什么 :shock:
大佬vba代码非常实用,不过如果想把文件名称放在A2怎么操作,
如图中的A5和A18(不含标题的数据开始的地方)。
大佬代码很实用,非常适用目前工作,找了很久了
自学了一段时间,但离自己写出代码还差很多。
1.如果想把文件名称放在数据到A2的位置,也就是图中A5:A14和A18:看不见了 :???: 的位置
(不含标题的数据开头的相对位置),2.还有想用图标点击一下实现这个功能,并且只生效一次,生效过后图标自动销毁。