ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 6876|回复: 16

[求助] 从多个excel中提取相同命名的sheet中固定位置的数据

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-5-11 17:07 | 显示全部楼层 |阅读模式
各位大神,我是excel小白。
目前提取数据遇到麻烦,向各位请教。
在一个文件夹中,有大量excel文件,每个excel中有N个sheet,sheet都有命名,但这些sheet的先后顺序在不同excel中不同。比如,命名“三年二班”的sheet在excel1文件中位置在Sheet 1,而相同命名的sheet在excel2文件中位置在sheet5。
现在提取sheet名叫”三年二班“C20,D20,E20三个固定位置的数据。代码应该是怎样的呢?
求助各位,非常感谢!

TA的精华主题

TA的得分主题

发表于 2015-5-11 17:18 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-5-11 17:25 | 显示全部楼层

  1. '*********************************
  2. '*******  北极狐工作室出品  ******
  3. '*******  QQ:14885553      ******
  4. '*********************************

  5. Sub Opiona() '//函数实例
  6. Set SH0 = Sheet1
  7. IROW = 1
  8. FileArr = FileAllArr(ThisWorkbook.Path, "*.xls", ThisWorkbook.Name, False)
  9. For I = 0 To UBound(FileArr)
  10.     Set WB = Workbooks.Open(FileArr(I))   '//打开工作簿
  11.     Set SHNEW = WB.Worksheets("三年二班")
  12.         SH0.Cells(IROW, 1) = SHNEW.Range("C20").Value
  13.         SH0.Cells(IROW, 2) = SHNEW.Range("D20").Value
  14.         SH0.Cells(IROW, 3) = SHNEW.Range("E20").Value
  15.     WB.Close False  '//保存
  16.     IROW = IROW + 1
  17. Next

  18. End Sub
  19. '*******************************************************************************************************
  20. '功能:    查找指定文件夹含子文件夹内所有文件名或文件夹名(含路径)
  21. '函数名:  FileAllArr
  22. '参数1:   Filename    需查找的文件夹名 不含最后的""
  23. '参数2:   FileFilter     需要过滤的文件名,可省略,默认为:[*.*]
  24. '参数3:   Liwai           剔除例外的文件名,可省略,默认为:空,一般为:ThisWorkbook.Name
  25. '参数4:   Files           是否只要文件夹名,可省略,默认为:FALSE
  26. '返回值:  一个字符型的数组
  27. '使用方法:FileArr = FileAllArr(ThisWorkbook.Path, "*.xls", ThisWorkbook.Name,false)
  28. '作者:    北极狐工作室 QQ:14885553
  29. '*******************************************************************************************************
  30. Public Function FileAllArr(ByVal Filename As String, Optional ByVal FileFilter As String = "*.*", Optional ByVal Liwai As String = "", Optional ByVal Files As Boolean = False) As String()
  31.     Set Dic = CreateObject("Scripting.Dictionary")    '创建一个字典对象
  32.     Set Did = CreateObject("Scripting.Dictionary")
  33.     Dic.Add (Filename & ""), ""
  34.     I = 0
  35.     Do While I < Dic.Count
  36.         Ke = Dic.keys   '开始遍历字典
  37.         MyName = Dir(Ke(I), vbDirectory)    '查找目录
  38.         Do While MyName <> ""
  39.             If MyName <> "." And MyName <> ".." Then
  40.                 If (GetAttr(Ke(I) & MyName) And vbDirectory) = vbDirectory Then    '如果是次级目录
  41.                     Dic.Add (Ke(I) & MyName & ""), ""  '就往字典中添加这个次级目录名作为一个条目
  42.                 End If
  43.             End If
  44.             MyName = Dir    '继续遍历寻找
  45.         Loop
  46.         I = I + 1
  47.     Loop
  48.     Dim arrx() As String
  49.     I = 0
  50.     If Files = True Then   '//是否只输出文件夹名
  51.       
  52.         For Each Ke In Dic.keys '以查找总表所在文件夹下所有excel文件为例
  53.             ReDim Preserve arrx(I)
  54.             If Ke <> Filename & "" Then  '//自身文件夹除外
  55.                 arrx(I) = Ke
  56.                 I = I + 1
  57.             End If
  58.          Next
  59.          FileAllArr = arrx
  60.     Else
  61.         For Each Ke In Dic.keys '以查找总表所在文件夹下所有excel文件为例
  62.             MyFileName = Dir(Ke & FileFilter) '过滤器:EXCEL2003为:*.xls,excel2007为:*.xlsx
  63.             Do While MyFileName <> ""
  64.                If MyFileName <> Liwai Then '排除例外文件
  65.                   ReDim Preserve arrx(I)
  66.                   arrx(I) = Ke & MyFileName
  67.                   I = I + 1
  68.                End If
  69.                 MyFileName = Dir
  70.             Loop
  71.         Next
  72.         FileAllArr = arrx
  73.     End If
  74. End Function
  75. '****************************************************************



复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-5-11 17:30 | 显示全部楼层
Excel文件.rar (21.35 KB, 下载次数: 33)




如附件所示,提取N个excel文件中命名“三年二班”的sheet中的C20,D20,E20的数据。多谢。

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-5-11 17:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
feiren228 发表于 2015-5-11 17:18
上传附件。。

Excel文件.rar (21.35 KB, 下载次数: 31)
如附件所示,提取N个excel文件中命名“三年二班”的sheet中的C20,D20,E20的数据。多谢。

TA的精华主题

TA的得分主题

发表于 2015-5-11 17:33 | 显示全部楼层
baiqitun23 发表于 2015-5-11 17:30
如附件所示,提取N个excel文件中命名“三年二班”的sheet中的C20,D20,E20的数据。多谢。

起码做个汇总表的格式吧

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-5-12 08:44 | 显示全部楼层
feiren228 发表于 2015-5-11 17:33
起码做个汇总表的格式吧

汇总表.rar (6.49 KB, 下载次数: 52)



如附件,汇总表 A列 是excel文件名,B、C、D列分别是要提取的数据。

TA的精华主题

TA的得分主题

发表于 2015-5-12 09:10 | 显示全部楼层
baiqitun23 发表于 2015-5-12 08:44
如附件,汇总表 A列 是excel文件名,B、C、D列分别是要提取的数据。

汇总表,与分表放在同一目录下

Sub hb()
Dim arr, brr(1 To 999, 1 To 4), mypath, myfile As String, i As Integer, m As Integer
Dim cnn, rs, sql As String
mypath = ThisWorkbook.Path & "\"
myfile = Dir(mypath & "*.xlsx")
  Do While myfile <> ""
        If myfile <> ThisWorkbook.Name Then
            Set cnn = CreateObject("ADODB.Connection")
            cnn.Open "Provider=Microsoft.ace.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=no';Data Source=" & mypath & myfile
            sql = "select * from [三年二班$c20:e20]"
            Set rs = cnn.Execute(sql)
            arr = rs.getRows
                    m = m + 1
                    brr(m, 1) = Replace(myfile, ".xlsx", "")
                    brr(m, 2) = arr(0, 0)
                    brr(m, 3) = arr(1, 0)
                    brr(m, 4) = arr(2, 0)
        End If
                myfile = Dir
        Loop
cnn.Close
Set cnn = Nothing
Set rs = Nothing
Sheet1.Activate
[a:d] = ""
[a1].Resize(m, 4) = brr
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-5-12 10:18 | 显示全部楼层
魂断蓝桥 发表于 2015-5-12 09:10
汇总表,与分表放在同一目录下

Sub hb()

又看到大侠的文章!呵呵,学习一下

TA的精华主题

TA的得分主题

发表于 2015-5-12 10:19 | 显示全部楼层
如果大侠们的代码能加点解释语句,对小白来说就最好了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-13 13:42 , Processed in 0.032502 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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