ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 合并不同文件夹下相同名称的工作簿内的工作表到同一工作表

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-2-22 09:20 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
         各位老师们,因工作需要,需将不同文件夹下的相同名称的工作簿合并成一个工作簿,工作簿内的工作表也按照同一表名合并(只保留标题)。由于文件数量过多,复制粘贴很耗时间。我查了很多论坛上类似的合并方法,可验证结果无法得到我需求的效果,程序总是运行出错中断,比如copy语句无法调用,弹出“shee1$”定义错误等等问题。我又不会修改,只能求助大家。                附件中有各个不同文件名的文件夹,可打开后里面有三张相同名字的表格,需要将各个文件夹内同名的表格复制黏贴合并到一张表格中。比如将各个文件夹内所有叫“宁德凌晨2-5点违规运营车辆”合并成一张,“宁德市超速报警统计报表”合并成另一张。由于附件限制只能上传部分文件数据,麻烦各位老师帮忙看看,调试的结果可以运用到更多类似的文件中,谢谢!




数据.rar

1.86 MB, 下载次数: 130

TA的精华主题

TA的得分主题

发表于 2017-2-22 09:35 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-22 09:59 | 显示全部楼层
liulang0808 发表于 2017-2-22 09:35
http://club.excelhome.net/thread-1258425-1-1.html
有相关遍历资料供参考

谢谢,这个我会好好看看,但是好像跟我需要解决的问题没多大关系。具体见附件同名表格的合并,这点很伤脑筋。

TA的精华主题

TA的得分主题

发表于 2017-2-22 11:54 | 显示全部楼层
  1. Sub 合并同名表()
  2.     Dim FolderName As String, FileName As String
  3.     Dim FolderColl As New Collection, dicFile As Object
  4.     Set dicFile = CreateObject("scripting.dictionary")
  5.     Dim wb模板 As Workbook, wb As Workbook
  6.     Dim 模板 As Boolean
  7.     FolderName = Dir(ThisWorkbook.Path & "\*", vbDirectory)
  8.     Do While FolderName <> ""
  9.         If FolderName <> ".." And FolderName <> "." And InStr(FolderName, ".xls") = 0 Then
  10.             FolderColl.Add FolderName
  11.         End If
  12.         FolderName = Dir
  13.     Loop
  14.     For i = 1 To FolderColl.Count
  15.         FileName = Dir(ThisWorkbook.Path & "" & FolderColl.Item(i) & "\*")
  16.         Do While FileName <> ""
  17.             dicFile(FolderColl.Item(i) & "" & FileName) = FileName
  18.             FileName = Dir
  19.         Loop
  20.     Next
  21.     arr = dicFile.keys
  22.     Application.DisplayAlerts = False
  23.     For i = 1 To dicFile.Count
  24.         Debug.Print dicFile.Item(arr(i - 1))
  25.         For j = 1 To i - 1
  26.             If dicFile.Item(arr(i - 1)) = dicFile.Item(arr(j - 1)) Then
  27.                 模板 = False
  28.                 Exit For
  29.             Else
  30.                 模板 = True
  31.             End If
  32.         Next
  33.         If 模板 Or i = 1 Then
  34.             Set wb模板 = Workbooks.Open(ThisWorkbook.Path & "" & arr(i - 1))
  35.             wb模板.SaveAs ThisWorkbook.Path & "\汇总" & wb模板.Name
  36.             r = wb模板.Sheets(1).Range("A" & wb模板.Sheets(1).Rows.Count).End(xlUp).Row + 1
  37.             For k = i + 1 To dicFile.Count
  38.                
  39.                 If "汇总" & dicFile.Item(arr(k - 1)) = wb模板.Name Then
  40.                     Set wb = Workbooks.Open(ThisWorkbook.Path & "" & arr(k - 1))
  41.                     endrow = wb.Sheets(1).Range("A" & wb.Sheets(1).Rows.Count).End(xlUp).Row
  42.                     wb.Sheets(1).Rows("2:" & endrow).Copy
  43.                     wb模板.Activate
  44.                     wb模板.Sheets(1).Rows(r).Select
  45.                     ActiveSheet.Paste
  46.                     wb.Close
  47.                     r = r + endrow - 1
  48.                 End If
  49.             Next
  50.             wb模板.Save
  51.             wb模板.Close
  52.         End If
  53.     Next
  54.     Application.DisplayAlerts = True
  55. End Sub
复制代码


TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-22 14:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

谢谢您的回复,直接看代码不明白,可否附上附件。

TA的精华主题

TA的得分主题

发表于 2017-2-22 15:10 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
renne_yo 发表于 2017-2-22 14:50
谢谢您的回复,直接看代码不明白,可否附上附件。

直接运行宏就可以了

合并同名表.zip

1.92 MB, 下载次数: 874

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-22 17:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
kldxlb 发表于 2017-2-22 15:10
直接运行宏就可以了

哇,太棒了,基本达到我的预期效果。又添加了几个文件夹试验,结果很不错,居然还能区分同名的03版本和高级版本excel表格,太赞了。有点瑕疵还是要提下,合并得到的表格里空值多,如果文件量大,可能一个表格装不下。预期的效果是合并同名表格保留第一个表格标题栏,其他工作簿复制标题栏以下内容。总之能得到这样的效果我已经很开心了,谢谢你,O(∩_∩)O

TA的精华主题

TA的得分主题

发表于 2017-2-22 23:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
你试试,应该达到了你的要求,表格格式(主要是表头位置)不一致,命名不规范(宁德市与宁德。有文件夹有个2-5点的那个文件,必须把文件名中的宁德市改为宁德,否则不能提取该表数据),所以处理起来比较困难。不过花了4小时(因为我也是VBA小白),总算解决了。

数据httpclub.excelhome.netthread-1329671-1-1.html.rar

1.94 MB, 下载次数: 493

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-2-23 09:54 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
乐乐2006201505 发表于 2017-2-22 23:02
你试试,应该达到了你的要求,表格格式(主要是表头位置)不一致,命名不规范(宁德市与宁德。有文件夹有个 ...

首先谢谢你的答复。根据你提供的宏文件,换了其他文件测试了好几遍,得到的结果很令人欣喜,确实是我理想中的效果(由于时间关系,还没测试大量的文件)。根据测试结果提几点问题:1.运行完宏跳出一个窗体,每每总是显示不同的数值,比如“116.28125”,“66.28516”,“72.18946”,“71.01563”,这些数值是什么含义?出现这个窗体是表示程序运行结束了吗?
2.命名不规范导致文件无法提取,这个问题有点棘手,我之前还没想到这点。由于这些文件是其他人提供,可能粗心疏忽而出现文件名不同的情况。特别是大量文件,难以做到打开一个个文件夹去确认文件名是否全都一致。虽然程序很好但拘束性强,根据实际情况可能用不了。
若能稍加改动程序,比如同名文件的模糊匹配,增加此程序的灵活性,运用到更多类似问题中就很实用了。再次谢谢你的回答,我会好好研究的(现在可能没那能力改程序,基本VBA语言都不知,只能运用结果)。

TA的精华主题

TA的得分主题

发表于 2017-2-23 10:07 | 显示全部楼层
本帖最后由 乐乐2006201505 于 2017-2-23 10:10 编辑
renne_yo 发表于 2017-2-23 09:54
首先谢谢你的答复。根据你提供的宏文件,换了其他文件测试了好几遍,得到的结果很令人欣喜,确实是我理想 ...

第一个问题,是完成汇总时间,你可以去掉,也可以作为代码速度的测试;
第二个问题,我试了一下,模糊匹配好像效果不是很好,用了like进行匹配,暂时未成功,后边我再考虑考虑,当然还可以通过先重命名统一文件名来实现想要的结果。另外你说到程序局限性的问题,作为VBA代码来说,已经做得可以了,你也可以求助其他高手帮你解决。

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-11-22 12:29 , Processed in 0.049487 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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