Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 20656|回复: 14

[已解决]VBA 如何将多个工作薄的数据汇总到一个新的工作薄中

[复制链接]
发表于 2012-9-7 10:46 | 显示全部楼层 |阅读模式
我想把比如20个工作薄(放在同一个文件夹下面,但是文件名不同,用日期区分)里面的同一个工作表比如sheet1里面的所有数据都按照顺序(例如依照a列里面的数据按照从小到大顺序排列,一共有5列对应数据)放在一个新的工作薄中,怎么实现?
最佳答案
2012-9-7 17:57
本帖最后由 5201314 于 2012-9-7 17:59 编辑
  1. Sub 合并多工作簿及多工作表()
  2.     Dim MyPath As String, MyFile As String, i As Integer
  3.     Dim Wb As Workbook, arr
  4.     Application.ScreenUpdating = False
  5.     MyPath = ThisWorkbook.Path
  6.     MyFile = Dir(MyPath & "\*.xls")
  7.     Do Until MyFile = ""
  8.         If MyFile <> ThisWorkbook.Name Then
  9.             Set Wb = Workbooks.Open(MyPath & "" & MyFile)
  10.             For i = 1 To Wb.Worksheets.Count
  11.                 arr = Sheets(i).UsedRange
  12.                 ThisWorkbook.Sheets(i).Range("A" & rows.count).End(xlUp).Offset(1).Resize(UBound(arr), UBound(arr, 2)) = arr
  13.             Next
  14.             Wb.Close
  15.         End If
  16.         MyFile = Dir
  17.     Loop
  18.     Application.ScreenUpdating = True
  19. End Sub
复制代码
发表于 2012-9-7 15:35 | 显示全部楼层
你遍历当前当前打开的工作簿下的目录下所有的EXCEL文件,然后逐个打开,复制需要的数据到数组,全部读完后再写入数据到工作表里,逐个循环就行了。
回复

使用道具 举报

 楼主| 发表于 2012-9-7 17:22 | 显示全部楼层
回复

使用道具 举报

发表于 2012-9-7 17:57 | 显示全部楼层    本楼为最佳答案   
本帖最后由 5201314 于 2012-9-7 17:59 编辑
  1. Sub 合并多工作簿及多工作表()
  2.     Dim MyPath As String, MyFile As String, i As Integer
  3.     Dim Wb As Workbook, arr
  4.     Application.ScreenUpdating = False
  5.     MyPath = ThisWorkbook.Path
  6.     MyFile = Dir(MyPath & "\*.xls")
  7.     Do Until MyFile = ""
  8.         If MyFile <> ThisWorkbook.Name Then
  9.             Set Wb = Workbooks.Open(MyPath & "" & MyFile)
  10.             For i = 1 To Wb.Worksheets.Count
  11.                 arr = Sheets(i).UsedRange
  12.                 ThisWorkbook.Sheets(i).Range("A" & rows.count).End(xlUp).Offset(1).Resize(UBound(arr), UBound(arr, 2)) = arr
  13.             Next
  14.             Wb.Close
  15.         End If
  16.         MyFile = Dir
  17.     Loop
  18.     Application.ScreenUpdating = True
  19. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2012-9-10 11:25 | 显示全部楼层
运行良好,高手!高手!佩服佩服!
回复

使用道具 举报

发表于 2013-10-29 14:36 | 显示全部楼层
合并时,但把标题同事统计进去了,在改进就更好了
回复

使用道具 举报

发表于 2013-10-29 14:36 | 显示全部楼层
回复

使用道具 举报

发表于 2013-11-17 15:07 | 显示全部楼层
谢谢
我先下,

回复

使用道具 举报

发表于 2014-1-14 11:20 | 显示全部楼层
我的是只需要每个表里面的三列,将24个表里相同位置的3列放到一个数组中,怎么实现啊?新手请求赐教
回复

使用道具 举报

发表于 2014-1-15 20:59 | 显示全部楼层
数据量大时提示:运行时错误'1004':应用程序定义或对象定义错误。去表头怎样修改?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-13 08:40 , Processed in 0.212975 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表