上次我们讲到对单个工作簿内具有相同格式的所有工作表进行汇总,和多个工作簿中,每个工作簿只有一个工作表时,汇总所有工作簿的方法,这一次我们讲一讲有多个工作簿,每个工作簿有多个工作表时的汇总方法。
例如一个文件夹内有10个工作簿(workbook),每个工作簿里的12个工作表,每一个工作表(worksheet)代表某年某个月的信息,所有月份的信息具有相同的格式。现在要对所有工作簿里所有的工作表进行汇总。如果一个一个工作簿打开后进行手工复制会显得很麻烦。当这样的工作簿过多时,更不可能用手工复制,此时怎么做才能更快完成工作呢?
例子
为了便于讲解,我们以汇总12个班的成绩为例,有4个工作簿,每个工作簿有3个工作表,分别存放3个班的成绩。具体格式如下图所示:
图1代码如下:
Sub 多工作多工作表簿汇总()
Dim item As Integer '循环工作簿
Dim i As Integer '循环工作表
Dim fn As String ' 文件名
Dim wb As Workbook ’打开的工作簿
Worksheets.Add after:=Worksheets(Worksheets.Count)
Worksheets(Worksheets.Count).Name = "汇总表" '新建汇总表,并命名
If Application.FileDialog(3).Show = -1 Then
fn = Application.FileDialog(3).SelectedItems(1)
Workbooks.Open fn
Set wb = ActiveWorkbook
wb.Worksheets(1).UsedRange.Copy ThisWorkbook.Worksheets("汇总表").Cells(1)
For i = 2 To Worksheets.Count
wb.Worksheets(i).UsedRange.Offset(1, 0).Copy ThisWorkbook.Worksheets("汇总 表").Cells(ThisWorkbook.Worksheets("汇总表").Rows.Count, 1).End(xlUp).Offset(1, 0)
Next i
Workbooks(wb.Name).Close
For item = 2 To Application.FileDialog(3).SelectedItems.Count
fn = Application.FileDialog(3).SelectedItems(item)
Workbooks.Open fn
Set wb = ActiveWorkbook
For i = 1 To Worksheets.Count
wb.Worksheets(i).UsedRange.Offset(1, 0).Copy ThisWorkbook.Worksheets("汇总表").Cells(ThisWorkbook.Worksheets("汇总表").Rows.Count, 1).End(xlUp).Offset(1, 0)
Next i
Workbooks(wb.Name).Close
Next item
End If
End Sub
打开一个新工作簿,运行上述代码后,程序会打开文件选择对话框,我们打开图1所示的文件夹,并选择要汇总的工作簿(共4个)后,点击确定会得到下图的汇总结果。
汇总表中包括了我们所要汇总的所有12个班的成绩
这些代码是怎么实现这一功能的呢?
在学习了文章一开始提到的两篇文章中的代码后,理解本文中的代码就没什么问题了,剩下的只是思路问题。有疑惑可以看前面两篇文章,这里只讲实现思路。
首先,我们还是像多工作簿汇总一样,打开一个文件选择对话框,选择我们要汇总的工作簿。
然后,我们打开第一个工作簿,对其中的工作表进行汇总。先对其中第一个工作表进行复制粘贴(因为包括了标题栏,所以需要单独复制),然后循环第一个工作簿中的其它工作表(不包括标题栏)。
最后再循环其它工作簿中的所有工作表的数据区域(不包括标第一行),因为它们的操作都一样,所以使用两层循环(循环工作簿和循环工作表)来直接完成。恩,完了,就是这么简单。
总结
今天讲的是多个工作簿内多工作表的汇总模板,如果有任何疑问可以评论交流。
(本文为原创,未经允许,不得转载)
网友评论