分享

批量汇总工作簿

 VBA说 2020-04-07

批量汇总工作簿

A large collection of workbooks


工作中有时候需要批量汇总一些格式相同的工作表,或者批量提取工作表中的某一列某一行数据。一般的解决思路就是:利用Dir函数对工作薄进行循环,对于每一个工作簿再对工作簿中每一个worksheet进行循环,然后获取你需要的内容。

这节课我们讲一个最简单的汇总工作簿的实例。可以作为模板代码,应用到以后类似的例子中。学精这一个就可以举一反三,触类旁通。

下面讲一个应用实例:

现有每日登记A、B、C、D....等等表格,格式相同。要求:每日登记表表中有按日期命名的sheet页,现需要将每个工作簿中的所有sheet页面数据复制汇总到汇总表中。如果手动粘贴的话,表格很多,需要一个表格一个的打开复制粘贴,很浪费时间。下面就告诉大家如何用vba解决此类问题。

   分表样式

汇总表

思路循环打开每个工作簿,遍历每个worksheet,复制数据至汇总表。

知识点循环、Dir函数

Sub 提取数据()

    Dim f As String

    Application.ScreenUpdating = False'关闭屏幕刷新,加快运行速度

    f = Dir(ThisWorkbook.Path &"*.xls*")'第一次使用Dir函数,获取第一个表格

    Do While f <> "" And f<> ThisWorkbook.Name

        Set wb = GetObject(f) '隐式打开工作簿

        For i = 1 To wb.Worksheets.Count’对工作簿中所有worksheet做循环

           wb.Worksheets(i).Range("a2:n" & [a1].End(xlDown).Row)_

          .Worksheets(1).[a1].Offset(1, 0)’copy数据

        Next

        f = Dir’Dir函数二次使用,为了获取下一个工作簿

    Loop

    Set wb = Nothing

    Application.ScreenUpdating = True

End Sub

图中带颜色代码为汇总工作簿模板代码,其余都可以根据这个来扩展。

代码解释代码使用Dir函数依次取工作簿名称,循环打开提取相应数据。代码中 Do While f <> "" And f<> ThisWorkbook.Name是为了给循环限定条件,当用Dir函数取得的工作簿名称不为空并且不等于汇总表名称的时候开始循环。

注意:汇总前将需要汇总的表格和汇总表放入同一个文件夹中若汇总文件不想放在代码工作簿路径,可使用filedialog对象(文件对话框对象)来获取需要汇总的文件全路径(路径+文件名)。以后会专门讲解。

下面是汇总的结果:

这是批量汇总工作簿的经典实例,希望大家好好研究消化,成为自己的东西。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多