ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 遍历指定文件夹多个excel文件,读取文件名和文件中某几个位置的数据到汇总表

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-7-15 19:15 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我需要从很多个(上百)excel文件中,遍历读取所有文件名和多个指定单元格数据。
举个例子,医院把每年来体检的人的体检信息都以人名保存成单独的excel文件,每个excel文件都有若干个sheet工作表(各项检测指标,如心电、血脂等)。我现在要汇总一段时期内某几项指标的具体数值,在一个新的excel内以下面的形式显示:

序号 姓名 体检日期 血压 总胆固醇 甘油三酯 其它略


我用VB也只会自己录制宏然后从里面复制,请大家帮我给个快捷的解决方法,最后是不要在前台一一打开各个文件。

TA的精华主题

TA的得分主题

发表于 2010-7-15 19:46 | 显示全部楼层

参考

样式.rar (22.07 KB, 下载次数: 1897)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-7-16 19:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
非常感谢hupanshan的解答。
您的代码我正在研究学习中,我需要的是每个文件中的几个数据,不是全部的数据。我先自己改代码,不行的话再请教。

这2天我自己琢磨的笨办法是建个.bat文件,放在文件夹里,运行tree命令输出文本来得到全部文件的名称,然后导入excel中(这个过程也可以在excel中调用run命令完成吧?我没有研究),然后用&方法合并成完整路径,但是不会以批量以公式输入来引用,单个手动输入可以。例如
Range("h10") = "='D:\报告\[王强.xlsx]体检报告'!$W$10"
我把引用路径换成变量或者引用单元格里输好的文本路径,就不行了,输出成文本了。

我VBA还算不上入门,虽然有思路,也知道有命令语句来实现我的思路,但查看帮助文件和网络求助还不会很正确的搜索方法,很难找到适合自己的答案。

TA的精华主题

TA的得分主题

发表于 2010-7-16 19:31 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-7-16 21:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
您的第一个附件我学习了一下,但有很多不明白的地方,百度不到,希望能指点一下。

Private Sub CommandButton1_Click()
    Set cnn = CreateObject("adodb.connection")
    '定义cnn为一个什么类型的数据库数据?
    [a2:i65536].ClearContents
    '清空指定范围数据
    h = 2
    '给变量h赋值为2
    f = Dir(ThisWorkbook.Path & "\*.xls")
    '给变量f赋值为本文件夹下所有.xls文件
    Do While f > " "
    '判断f,直到f返回值不满足>0长度字节段的条件,则停止循环
        If f <> ThisWorkbook.Name Then
        '判断,当f与当前运行代码的excel文件名不相同,则
            cnn.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.Path & "\" & f
            '这个是说用参数指定的数据库工具、程序、路径去打开f满足条件时指向的文件吧?open后面的双引号和那个配对的?
            Sql = "select * from [端子端口详情$]"
            '数据取值为f指向文件的[端子端口详情]表的select*范围,这个$是什么作用呢?
            Cells(h, 2).CopyFromRecordset cnn.Execute(Sql)
            '在[2,2]处粘贴cnn。(这里直接b2不行吗?是不是cells的行列参数只认数字?)
            ed = [b65536].End(3).Row + 1
            '这个是数值?一个单元格位置?一个区域?这句目的应该是是为下句输文件名定范围,但怎么实现的看不懂。end(3)什么意思?
            Cells(h, 1).Resize(ed - h, 1) = f
            '在指定范围输入f指向的文件名。
            h = ed
            '重新给h赋值为ed。
            cnn.Close
            '断开cnn的链接
        End If
        '循环结束
        f = Dir
        '再次调用dir命令。dir怎么这么聪明,按顺序不重复,不遗漏?如果dir的时候文件夹排序动一下呢?
    Loop
    '循环退出
End Sub

TA的精华主题

TA的得分主题

发表于 2010-7-18 14:57 | 显示全部楼层
Private Sub CommandButton1_Click()
    Set cnn = CreateObject("adodb.connection")
    '令cnn表示新设的ADODB.Connection对象。我一般很少定义变量,如果定义的话Dim cnn As ADODB.Connection
    [a2:i65536].ClearContents
    '清空指定范围数据
    h = 2
    '给变量h赋值为2
    f = Dir(ThisWorkbook.Path & "\*.xls")
    '给变量f赋值为本文件夹下用dir函数取得的第一个.xls文件名
    Do While f > " "
    '判断f,直到f返回值不满足>一个空格的条件,则停止循环
        If f <> ThisWorkbook.Name Then
        '判断,当f与当前运行代码的excel文件名不相同,则
            cnn.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.Path & "\" & f
            '打开ADO连接到指定文件,第一组双引号之间先照抄吧。
            Sql = "select * from [端子端口详情$]"
            '这个$是规定,先照抄吧
            Cells(h, 2).CopyFromRecordset cnn.Execute(Sql)
            '在[2,2]处粘贴cnn。(如果只导入一个文件的数据,可以用[b2])
            ed = [b65536].End(3).Row + 1
            '找B65536往上第一个有数据的行加1作为下次导入数据的位置。更完整的写法ed = [b65536].End(Xlup).Row + 1
            Cells(h, 1).Resize(ed - h, 1) = f
            '在指定范围输入f指向的文件名。
            h = ed
            '重新给h赋值为ed。
            cnn.Close
            '断开cnn的链接
        End If
        '循环结束
        f = Dir
        '这也是规定,就这样写就可以。因为本程序操作不涉及文件的增删,所以不会发生读取文件名的错误
    Loop
    '循环退出
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-7-18 17:21 | 显示全部楼层
非常感谢!不过我又遇到了新问题,请下载附件查看。

指定位置汇总.zip

31.94 KB, 下载次数: 347

TA的精华主题

TA的得分主题

发表于 2010-7-19 11:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
最好的解决方法是把文件格式统一

TA的精华主题

TA的得分主题

发表于 2010-7-19 11:57 | 显示全部楼层

回复 8楼 hupanshan 的帖子

请高手帮我做个宏哦附件中的问题表有三个表,表一是数据表,表二是费用明细表,表三是汇总表,根据表一和表二的数据按相同项目汇总到表三,当表一的B列(名称)和表三的A列(项目)的名字相同时,并且表一的G2(月份)和表三的第一行的月份相同时,把表一的数据复制到表三,比如6月,厚豆腐,:表二的B列(二级科目)的名字和表三的表三的A列(项目)的名字相同时,并且表二的F1(月份)和表三的第一行的月份相同时,把表一的数据复制到表三

问题表0711.rar

20.37 KB, 下载次数: 104

效果表0711.rar

20.43 KB, 下载次数: 136

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-7-19 16:49 | 显示全部楼层
9楼的问题貌似可以用数据透视表解决,也可以定义名称并用条件格式来解决,没必要编写宏。

我的水平还在初级之外,我只是猜测解决方法。 无知者无畏。

===============================

你的描述误导了我,你说的问题表有3个表。。。应该是问题表文件夹里有3个工作薄。

[ 本帖最后由 yanono 于 2010-7-19 17:19 编辑 ]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-12 10:44 , Processed in 0.030185 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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