分享

多个Excel工作簿中内容汇总到一张表中 | VBA实例教程

 gblhp 2015-02-16

除非注明,文章均为 战战如疯 原创,转载请保留链接: http://www./cat4/51.html,VBA交流群273624828。

今天我们来讲Excel VBA中最常用的一个功能——汇总多个Excel表格。假如你的手头有很多格式完全相同的表格,记录着同一类的信息,像是各个分公司人事发来的各地员工信息表、各个分公司当日或当月的业绩情况、各个门店当日的销售业绩等等,你需要把这些工作薄汇总到一张表格里以便统计分析之用。如果工作簿比较少,比如只有个位数的分公司或者门店,这时你手动的复制粘贴也不会花太多时间,或者你所在的公司是个大公司,有自己的系统,每天的报表都走系统不用你费心,但是如果你的公司达不到上面的要求呢?你手头有几十上百个表要汇总,你会怎么办?这种看起来很麻烦的事情对Excel VBA或所谓的宏来说就是小菜一碟了。好了,不说废话了,看例子。

假设你是某个公司总部的人事,现在你手头上有来自全国各分公司的员工信息,需要将其汇总到一张表,简单起见,就假设有5张表。第一步,将所有的5张表都放到一个文件夹下,之后新建一个Excel工作簿,Alt+F11打开VBA编辑界面,将下面的代码复制进去

Sub HuiZong()
Dim myfile, mypath, wb               '声明变量
Application.ScreenUpdating = False   '关闭屏幕更新
Sheet1.UsedRange.Offset(1, 0).Clear  '清除除表头之外的所有内容
mypath = ThisWorkbook.Path           '找到当前工作簿的路径
myfile = Dir(mypath & "\*.xls*")     '遍历当前文件夹下的Excel文件
Do While myfile <> ""                '当找到的文件不为空时
If myfile <> ThisWorkbook.Name Then   '当找到的文件不是当前Excel工作簿时
Set wb = GetObject(mypath & "\" & myfile)   '得到dir找到的工作簿的内容,设为wb
With wb.Sheets(1)              '对找到的工作簿的sheet1进行操作
'复制wb的sheet1除第一行的所有内容
.UsedRange.Offset(1, 0).Copy Sheet1.Range("A" & Sheet1.UsedRange.Rows.Count + 1)
End With
wb.Close False      '关闭wb工作簿且不保存
End If
myfile = Dir          '寻找下一个Excel工作簿
Loop
Application.ScreenUpdating = True   '恢复屏幕更新
End Sub

复制进去之后保存文件,然后按F5运行VBA程序,你会发现所有的5个工作簿中的内容都被汇总到当前工作簿中来了,是不是方便了很多呢?示例文件下载地址http://pan.baidu.com/s/1bnlJhq3。为了照顾一些用Excel 2003版的朋友我将示例文件存为了2003的格式,但是想想吧还是与时俱进的好,所以往后的示例文件我还是直接用Excel 2007了。

这个程序的知识点主要包括UsedRange,offset函数的应用,Dir遍历函数的应用如何利用GetObject获得工作簿中的内容,以及do while...loop循环,这些内容我都会在以后慢慢讲到,请朋友们继续关注。

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多