给大家分享一个EXCEL一键汇总的小方法。通过VBA实现,按键可以放到工具栏。网上能找到许多类似汇总代码,如果不懂得话不太敢用,因为工作中用的比较多就完善了一下,通用性考虑得更多些,现在分享给大家。
在这之前先明确两个名词 “工作表”和“工作簿”,工作表这里指的是EXCEL文件,工作簿指的是工作表里的sheet1,sheet2之类的。
![bbeb6ea95d1ab19cb53892d33790ea20.png](https://i-blog.csdnimg.cn/blog_migrate/88e43b2e20a618629f8277398ddd7228.jpeg)
工作簿
![97a7d5800d4bd8bdd9a6dbe6dfe52ca6.png](https://i-blog.csdnimg.cn/blog_migrate/aa0af310e9905d3bed8206e6df95d459.jpeg)
工作表
因为有的地方这两个是反过来的。
先看一下汇总效果
![da0317179dc692a5cee737f3d26ed3de.gif](https://i-blog.csdnimg.cn/blog_migrate/0fa21c04cb48e43a8047a6efe14ae33d.gif)
一键汇总“各村”文件夹里的Excel文件
然后是EXCEL设置
第一步:宏设置
![c4d0982ea7159ab697fcd8cc21343331.gif](https://i-blog.csdnimg.cn/blog_migrate/1dfdb0c2f67b3198ed8cc9509135bdcc.gif)
第二步:快捷键设置
![dbff4e2ca9f6ca5ae9bde66fe8b81a4b.gif](https://i-blog.csdnimg.cn/blog_migrate/2afe97adde499f6327f0528f2ec0bd31.gif)
TXT中的就是汇总代码,注意步骤不能漏。
代码如下:
Sub 工作表__总表()
Dim wb, wb1 As Workbook
Dim fso, ff, f As Object
Dim p As String
Dim a, b, c As Long
Dim d, e
Set wb1 = ActiveWorkbook
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = ActiveWorkbook.Path
.Title = "请指定要汇总的文件夹"
If .Show = -1 Then
p = .SelectedItems(1)
Else
Exit Sub
End If
End With
c = Val(InputBox("请输入表头行数"))
If c = 0 Then
Exit Sub
End If
d = Timer
Application.ScreenUpdating = False
wb1.Sheets(1).Rows().ClearContents '清空目标表第一个工作簿
Set fso = CreateObject("scripting.filesystemobject")
Set ff = fso.getfolder(p)
For Each f In ff.Files '对指定文件夹循环每个文件
If Split(f.Name, ".")(UBound(Split(f.Name, "."))) Like "*xls*" Then '判断是不是Excel文件
Set wb = GetObject(f.Path)
If wb.Sheets(1).AutoFilterMode = True Then
wb.Sheets(1).Range("a" & 1 & ":z" & 65536).AutoFilter
End If
If wb1.Sheets(1).Cells(1, 1).Value = "" Then
wb.Sheets(1).UsedRange.Copy wb1.Sheets(1).Cells(1, 1)
'
Else
a = wb1.Sheets(1).Cells(65535, 1).End(xlUp).Row 'wb1目标工作表
b = wb.Sheets(1).Cells(65535, 1).End(xlUp).Row
wb.Sheets(1).Rows(c + 1 & ":" & b).Copy wb1.Sheets(1).Cells(a + 1, 1)
'
End If
wb.Close savechanges:=False
Set wb = Nothing
End If
Next
e = Timer - d
MsgBox "汇总成功,用时" & e & "秒"
Application.ScreenUpdating = True
End Sub
有些要注意的地方:1、要汇总的Excel文件都放到同一个文件夹里面,每个文件格式要一致,就是说表头要一致。2、每个表的最后一行数据的第一列不能为空,不然这行数据会统计不到。3、汇总文件放文件夹外面。
这次就到这,回头把总表按指定列分发工作表的代码发出来。