如何从多个EXCEL文档中快速提取指定的工作表?

新年的第一篇文章回答了SVIP成员的一个问题-如何从多个EXCEL文档中批量提取具有指定名称的工作表?  

如图所示,有食品销售明细(。文件夹下多个省/市的Xlsx)。打开文档时,可以看到每个文档都包含以下工作表:

现在需要将每个文档中的“水果销售”工作表提取到摘要文档中。汇总后的效果如下图所示(汇总工作表以省/市名称命名):

本例中,只用3个省(市)文档举例,实际工作中文档数量多达几十个。

A. 正常的操作方法——

1、打开第1个文档,复制“水果销售”工作表到汇总文档,并修改工作表名为对应的省(市)名称,关闭第1个文档。

2、打开第2个文档,操作同上……

3、……直到操作完成所有文档。

当文档数量较多时,手工操作速度就慢了。今天教大家使用VBA一键完成工作表提取。

B. VBA方法——

因此,我们只要用VBA遍历打开所有文件,并实现对应操作即可。

1、提前制作文档名称列表:为了方便对各个文档进行遍历操作,我们提前将文档名和复制后将要命名的工作表名写在汇总表的Sheet1表格里:

2、编写代码:ALT+F11,打开VBE窗口,在工程窗口(Project)找到汇总文档,双击Sheet1模块,编写代码:

Sub 批量提取工作表()

For i = 2 To 4

Workbooks.Open “D:\A 表格学院\06 我的作品\【VBA】我的VBA学习实践库\【VBA】终极合并——多文档及多工作表的合并多\” & ThisWorkbook.Sheets(1).Cells(i, 1) & “.xlsx”  

For Each sht In ActiveWorkbook.Sheets

  If sht.Name = “水果销售” Then

  sht.Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)

ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = ThisWorkbook.Sheets(1).Cells(i, 2)

 End If

Next

Workbooks(ThisWorkbook.Sheets(1).Cells(i, 1) & “.xlsx”).Close ‘关闭某个指定文件,括号中是文件名,不是完整路径加文件名

Next

End Sub

代码用For…Next…循环打开的文档中每一张工作表,如果名称为“水果销售”,则将其拷贝到汇总文档,并放在最后1张表后面。当然,也不要忘了修改工作表名字。
3、执行:将光标定位到代码任意位置,按F5执行程序,结果过程及结果如下GIF所示:

本期知识点:

1、打开工作薄——Workbooks.Open “路径及文档名称”  

2、工作表复制——Worksheets(“水果销售”).Copy After:=,复制工作表到指定位置

3、For Next——VBA经典循环结构

4、关闭工作薄:Workbooks(ThisWorkbook.Sheets(1).Cells(i, 1) & “.xlsx”).Close5、ThisWorkbook.Sheets.Count——计算代码所在工作薄中的工作表数量

资源下载: