Excel精英培训网

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

[已解决]VBA多个文件夹内多个工作簿固定单元格内数据提取

[复制链接]
发表于 2015-3-2 14:47 | 显示全部楼层 |阅读模式
本帖最后由 fiona_123456 于 2015-3-2 14:49 编辑

各位论坛老师,想请教下如何用VBA实现在多个文件夹下多个工作簿中提取固定单元格内容
见附件,在“数据文件”文件夹下,有30多个文件夹,每个文件夹下有上百个工作簿,如何提取工作簿中
固定sheet 内(“FWXXX" sheet)固定格式内的内容(“data”列内的数据)复制到新的“数据汇总”工作表中,万分感谢!!!!


最佳答案
2015-3-2 17:07
考虑格式。。。
  1. Sub 导入()
  2.     Application.DisplayAlerts = False
  3.     Set fso = CreateObject("scripting.filesystemobject")
  4.     Set ff = fso.getfolder(ThisWorkbook.Path)
  5.     Cells.Clear: r = -10
  6.     For Each fff In ff.subfolders
  7.        n = 1: ReDim brr(1 To 11, 1 To n)
  8.        xrr = Split(fff, ""): xname = xrr(UBound(xrr))
  9.        brr(1, 1) = xname '第一列姓名
  10.        For Each f In fff.Files
  11.          Set wb = Workbooks.Open(f)
  12.          Set sht = wb.Sheets(1)
  13.          crr = sht.[d9:e18]        '要导入的数据区域
  14.          ActiveWorkbook.Close False
  15.          n = n + 1
  16.          ReDim Preserve brr(1 To 11, 1 To n)
  17.          brr(1, n) = crr(1, 1)    '第一行FW****
  18.          For j = 2 To UBound(brr): brr(j, n) = crr(j - 1, 2): Next
  19.        Next
  20.        r = r + 11
  21.        Cells(r, 1).Resize(11, n) = brr
  22.        Cells(r, 1).Resize(11, 1).Merge
  23.     Next
  24.     Application.DisplayAlerts = True
  25. End Sub
复制代码

数据文件.zip

75.75 KB, 下载次数: 239

发表于 2015-3-2 16:59 | 显示全部楼层
  1. Sub 导入()
  2.     Set fso = CreateObject("scripting.filesystemobject")
  3.     Set ff = fso.getfolder(ThisWorkbook.Path)
  4.     For Each fff In ff.subfolders
  5.        n = 1: ReDim brr(1 To 11, 1 To n)
  6.        xrr = Split(fff, ""): xname = xrr(UBound(xrr))
  7.        For i = 1 To UBound(brr): brr(i, 1) = xname: Next     '第一列姓名
  8.        For Each f In fff.Files
  9.          Set wb = Workbooks.Open(f)
  10.          Set sht = wb.Sheets(1)
  11.          crr = sht.[d9:e18]        '要导入的数据区域
  12.          ActiveWorkbook.Close False
  13.          n = n + 1
  14.          ReDim Preserve brr(1 To 11, 1 To n)
  15.          brr(1, n) = crr(1, 1)    '第一行FW****
  16.          For j = 2 To UBound(brr): brr(j, n) = crr(j - 1, 2): Next
  17.        Next
  18.        r = [a65536].End(3).Row + 2
  19.        If r = 3 Then r = 1
  20.        Cells(r, 1).Resize(11, n) = brr
  21.     Next
  22. End Sub
复制代码
回复

使用道具 举报

发表于 2015-3-2 16:59 | 显示全部楼层
请看附件。

数据文件.rar

86.04 KB, 下载次数: 352

回复

使用道具 举报

发表于 2015-3-2 17:07 | 显示全部楼层    本楼为最佳答案   
考虑格式。。。
  1. Sub 导入()
  2.     Application.DisplayAlerts = False
  3.     Set fso = CreateObject("scripting.filesystemobject")
  4.     Set ff = fso.getfolder(ThisWorkbook.Path)
  5.     Cells.Clear: r = -10
  6.     For Each fff In ff.subfolders
  7.        n = 1: ReDim brr(1 To 11, 1 To n)
  8.        xrr = Split(fff, ""): xname = xrr(UBound(xrr))
  9.        brr(1, 1) = xname '第一列姓名
  10.        For Each f In fff.Files
  11.          Set wb = Workbooks.Open(f)
  12.          Set sht = wb.Sheets(1)
  13.          crr = sht.[d9:e18]        '要导入的数据区域
  14.          ActiveWorkbook.Close False
  15.          n = n + 1
  16.          ReDim Preserve brr(1 To 11, 1 To n)
  17.          brr(1, n) = crr(1, 1)    '第一行FW****
  18.          For j = 2 To UBound(brr): brr(j, n) = crr(j - 1, 2): Next
  19.        Next
  20.        r = r + 11
  21.        Cells(r, 1).Resize(11, n) = brr
  22.        Cells(r, 1).Resize(11, 1).Merge
  23.     Next
  24.     Application.DisplayAlerts = True
  25. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2015-3-5 14:33 | 显示全部楼层
本帖最后由 fiona_123456 于 2015-3-5 17:05 编辑

感谢grf1973的回复,想请教下如果换一种格式(纵向排列), 应该怎么写?

数据文件-格式二.zip

76.15 KB, 下载次数: 73

回复

使用道具 举报

发表于 2015-3-6 09:32 | 显示全部楼层
新格式要简单得多
  1. Sub 导入()
  2.     Application.ScreenUpdating = False
  3.     Set fso = CreateObject("scripting.filesystemobject")
  4.     Set ff = fso.getfolder(ThisWorkbook.Path)
  5.     Cells.ClearContents
  6.     For Each fff In ff.subfolders
  7.        xrr = Split(fff, ""): xname = xrr(UBound(xrr))
  8.        For Each f In fff.Files
  9.          Set wb = Workbooks.Open(f)
  10.          Set sht = wb.Sheets(1)
  11.          crr = sht.[d9:e18]        '要导入的数据区域
  12.          ActiveWorkbook.Close False
  13.          r = [a65536].End(3).Row + 1
  14.         If r = 2 Then r = 1
  15.         Cells(r, 1).Resize(UBound(crr), 1) = xname
  16.         Cells(r, 2).Resize(UBound(crr), 2) = crr
  17.        Next
  18.     Next
  19.     Application.ScreenUpdating = True
  20. End Sub
复制代码

数据文件-格式二.rar

84.47 KB, 下载次数: 296

回复

使用道具 举报

发表于 2016-4-5 19:00 | 显示全部楼层
Xuexiliao
回复

使用道具 举报

发表于 2016-4-5 19:32 | 显示全部楼层
学习了。
回复

使用道具 举报

发表于 2016-12-8 16:46 | 显示全部楼层
grf1973 发表于 2015-3-6 09:32
新格式要简单得多

如果只是提取某行的数据,应如何修改,谢谢!
回复

使用道具 举报

发表于 2017-5-17 10:53 | 显示全部楼层
grf1973,请问分开工作表来完成吗?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 05:47 , Processed in 0.388698 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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