ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 多文件夹中文件合并

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-4-22 21:05 | 显示全部楼层 |阅读模式
本帖最后由 月舞苍穹 于 2024-4-22 21:06 编辑

“各单位报表”里面有12个月的文件夹,需要把所有的文件“表头不重复的”合到一个页面,老师帮看看问题出在哪


Sub 合并()
    Dim d As Object, arr, brr(), sh As Worksheet
    Set d = CreateObject("scripting.dictionary")
    ReDim brr(1 To 100000, 1 To 1000)
        For k = 1 To 12
            myPath = ThisWorkbook.Path & "\各单位报表\" & k & "月\"
            myName = Dir(myPath & "*.xls*")
            Do While myName <> ""
                With GetObject(myPath & myName)
                n = 1: m = 3
                    For Each sh In .Sheets
                    arr = sh.[a1].CurrentRegion
                        For i = 2 To UBound(arr)
                        n = n + 1
                            For j = 1 To UBound(arr, 2)
                                If Not d.Exists(arr(1, j)) Then
                                    m = m + 1
                                        brr(1, m) = arr(1, j)
                                        d(brr(1, m)) = m
                                End If
                                    y = d(arr(1, j))
                                    brr(n, y) = arr(i, j)
                                    brr(n, 1) = k
                                    brr(n, 2) = myName
                                    brr(n, 3) = Name
                            Next j
                        Next i
                    Next sh
                    .Close False
                End With
            myName = Dir
        Loop
        Next k
        With Sheet1
            .[a1].Resize(n, m) = brr
            .[a1] = "月份": .[b1] = "文件名": .[c1] = "表名"
        End With
End Sub

合并问题.zip

56.23 KB, 下载次数: 20

TA的精华主题

TA的得分主题

发表于 2024-4-23 01:29 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
仅供参考,希望对你有用

合并表.zip

23.26 KB, 下载次数: 28

TA的精华主题

TA的得分主题

发表于 2024-4-23 08:07 | 显示全部楼层
ssfx1982 发表于 2024-4-23 01:29
仅供参考,希望对你有用

大师,不要“Stop”这个代码行吗

TA的精华主题

TA的得分主题

发表于 2024-4-23 08:19 | 显示全部楼层
Sub 合并()
    Dim d As Object, arr, brr(), sh As Worksheet
    Set d = CreateObject("scripting.dictionary")
    ReDim brr(1 To 10000, 1 To 1000)
    n = 1
    m = 3
    For k = 1 To 12
        myPath = ThisWorkbook.Path & "\各单位报表\" & k & "月\"
        myName = Dir(myPath & "*.xls*")
        Do While myName <> ""
            With GetObject(myPath & myName)
               
                For Each sh In .Sheets
                    arr = sh.[a1].CurrentRegion
                    For i = 2 To UBound(arr)
                        n = n + 1
                        brr(n, 1) = k
                        brr(n, 2) = Split(myName, ".xls")(0)
                        brr(n, 3) = sh.Name
                        For j = 1 To UBound(arr, 2)
                            If Not d.Exists(arr(1, j)) Then
                                m = m + 1
                                brr(1, m) = arr(1, j)
                                d(brr(1, m)) = m
                            End If
                            y = d(arr(1, j))
                            brr(n, y) = arr(i, j)
                        Next j
                    Next i
                Next sh
                .Close False
            End With
        myName = Dir
        Loop
    Next k
    With Sheet1
        .[a1].Resize(n, m) = brr
        .[a1] = "月份": .[b1] = "文件名": .[c1] = "表名"
    End With
End Sub

TA的精华主题

TA的得分主题

发表于 2024-4-23 09:18 | 显示全部楼层
参与一下,附件供参考。。。

{DEFCBAB7-F44B-41b4-AAAA-CC9D91365650}.png

合并问题.7z

55.3 KB, 下载次数: 33

评分

4

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-23 09:18 | 显示全部楼层
参与一下。。。

  1. Sub ykcbf()  '//2024.4.23
  2.     Dim fds As New Collection
  3.     Set fso = CreateObject("scripting.filesystemobject")
  4.     Set d = CreateObject("Scripting.Dictionary")
  5.     Application.ScreenUpdating = False
  6.     Dim tm: tm = Timer
  7.     Set sh = ThisWorkbook.Sheets("合并")
  8.     p = ThisWorkbook.Path & "\各单位报表"
  9.     getfds p, fds
  10.     ReDim brr(1 To 10000, 1 To 100)
  11.     n = 3: m = 1
  12.     brr(1, 1) = "月份": brr(1, 2) = "文件名": brr(1, 3) = "表名"
  13.     For Each fd In fds
  14.         p1 = p & fd & ""
  15.         For Each f In fso.GetFolder(p1).Files
  16.             If f.Name Like "*.xls*" Then
  17.                 If InStr(f.Name, ThisWorkbook.Name) = 0 Then
  18.                     fn = fso.GetBaseName(f)
  19.                     Set wb = Workbooks.Open(f, 0)
  20.                     For Each sht In wb.Sheets
  21.                         With sht
  22.                             r = .Cells(Rows.Count, 1).End(3).Row
  23.                             c = .UsedRange.Columns.Count
  24.                             arr = .[a1].Resize(r, c)
  25.                             bm = .Name
  26.                         End With
  27.                         For j = 1 To UBound(arr, 2)
  28.                             s = arr(1, j)
  29.                             If Not d.exists(s) Then
  30.                                 n = n + 1
  31.                                 d(s) = n
  32.                                 brr(1, n) = s
  33.                             End If
  34.                         Next
  35.                         For i = 2 To UBound(arr)
  36.                             m = m + 1
  37.                             brr(m, 1) = fd
  38.                             brr(m, 2) = fn
  39.                             brr(m, 3) = bm
  40.                             For j = 1 To UBound(arr, 2)
  41.                                 c = d(arr(1, j))
  42.                                 brr(m, c) = brr(m, c) + arr(i, j)
  43.                             Next
  44.                         Next
  45.                     Next
  46.                     wb.Close False
  47.                 End If
  48.             End If
  49.         Next f
  50.     Next
  51.     With sh
  52.         .Cells.Clear
  53.         Set Rng = .[a1].Resize(m, n)
  54.         .[a1].Resize(1, n).Interior.Color = 49407
  55.         With Rng
  56.             .Value = brr
  57.             .Borders.LineStyle = 1
  58.             .HorizontalAlignment = xlCenter
  59.             .VerticalAlignment = xlCenter
  60.             .EntireColumn.AutoFit
  61.         End With
  62.     End With
  63.     Set d = Nothing
  64.     Application.ScreenUpdating = True
  65.     MsgBox "共用时:" & Format(Timer - tm) & "秒!"
  66. End Sub
复制代码


评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-23 09:33 | 显示全部楼层
本帖最后由 cyq4896 于 2024-4-23 09:52 编辑

学习一下..

合并问题.zip

63.56 KB, 下载次数: 30

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-23 09:39 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-4-23 09:52 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-4-23 09:55 | 显示全部楼层
本帖最后由 baofa2 于 2024-4-23 13:10 编辑

更新一下考虑更全面.zip (265.35 KB, 下载次数: 36)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 04:32 , Processed in 0.048905 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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