ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 跨文件夹合并表格问题求助

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-5-18 18:24 | 显示全部楼层 |阅读模式
本帖最后由 yyyeng 于 2024-5-18 18:26 编辑

             有多个文件夹,每个文件夹中有一个相同文件名的表格,表格中行数不等,有几行也有几十行的。能不能帮忙汇总所有表格, 并在每行注明表格所在的文件夹名,谢谢各位大师!

1.jpg
2.jpg
3.jpg
4.jpg

登记表.zip

24.29 KB, 下载次数: 10

TA的精华主题

TA的得分主题

发表于 2024-5-18 18:52 | 显示全部楼层
Option Explicit

Sub test()
    Dim ar, br, i&, j&, r&, ff, p$, strFileName
   
    Application.ScreenUpdating = False
    [A1].CurrentRegion.Offset(1).ClearContents
    ReDim ar(1 To 10 ^ 4, 1 To 5)
   
    p = ThisWorkbook.Path & "\"
    For Each ff In CreateObject("Scripting.FileSystemObject").GetFolder(p).subfolders
        strFileName = ff.Path & "\登记表.xlsx"
        If Dir(strFileName) <> "" Then
            With GetObject(strFileName)
                br = .Sheets(1).[A1].CurrentRegion.Value
                For i = 2 To UBound(br)
                    r = r + 1
                    ar(r, 1) = ff.Name
                    For j = 1 To UBound(br, 2)
                        ar(r, j + 1) = br(i, j)
                    Next j
                Next i
                .Close False
            End With
        End If
    Next
   
    [A2].Resize(r, UBound(ar, 2)) = ar
    Application.ScreenUpdating = True
    Beep
End Sub

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-5-18 18:53 | 显示全部楼层
,,,,,,

Desktop.rar

34.39 KB, 下载次数: 18

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-5-18 18:57 | 显示全部楼层
关键字:subfolders+union all
GIF 2024-05-18 18-55-50.gif

limonet.zip

34.08 KB, 下载次数: 13

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-5-18 18:57 | 显示全部楼层
Sub limonet()
    Dim Cn As Object, StrSQL$, F As Object
    Set Cn = CreateObject("Adodb.Connection")
    Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.FullName
    For Each F In CreateObject("scripting.filesystemobject").Getfolder(ThisWorkbook.Path).subfolders
        StrSQL = StrSQL & " Union All Select *,'" & F.Name & "' As FolderName From [Excel 12.0;DataBase=" & F.Path & "\登记表.xlsx].[Sheet1$]"
    Next F
    Range("A2").CopyFromRecordset Cn.Execute(Mid(StrSQL, 12))
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-5-18 19:45 | 显示全部楼层
参与一下。。。

登记表.7z

25.99 KB, 下载次数: 13

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-5-18 19:45 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
参与一下。。。

  1. Sub ykcbf()   '//2024.5.18
  2.     Dim brr(1 To 1000, 1 To 5)
  3.     Application.ScreenUpdating = False
  4.     Set sh = ThisWorkbook.Sheets("Sheet1")
  5.     p = ThisWorkbook.Path & ""
  6.     Set fso = CreateObject("Scripting.FileSystemObject")
  7.     For Each fd In fso.GetFolder(p).SubFolders
  8.         f = p & fd.Name & "\登记表.xlsx"
  9.         Set wb = Workbooks.Open(f, 0)
  10.         With wb.Sheets("Sheet1")
  11.             r = .Cells(Rows.Count, 1).End(3).Row
  12.             arr = .[a1].Resize(r, 4)
  13.         End With
  14.         wb.Close 0
  15.         For i = 2 To UBound(arr)
  16.             m = m + 1
  17.             brr(m, 1) = fd.Name
  18.             For j = 1 To UBound(arr, 2)
  19.                 brr(m, j + 1) = arr(i, j)
  20.             Next
  21.         Next
  22.     Next
  23.     With sh
  24.         .UsedRange.Offset(1).ClearContents
  25.         .[a2].Resize(m, 5) = brr
  26.     End With
  27.     Application.ScreenUpdating = True
  28.     MsgBox "OK!"
  29. End Sub

复制代码


评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-5-18 20:27 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Sub AggregateWorksheets()
Application.ScreenUpdating = False
    Dim fso As Object
    Dim folderPath As String
    Dim folder As Object
    Dim file As Object
    Dim wbSource As Workbook
    Dim wsSource As Worksheet
    Dim wsTarget As Worksheet
    Dim rowIndex As Long
    folderPath = ThisWorkbook.Path
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set wsTarget = ThisWorkbook.Worksheets(1)
    rowIndex = 2
    For Each folder In fso.GetFolder(folderPath).SubFolders
        For Each file In folder.files
            If Right(file.Name, 5) = ".xlsx" Then '仅处理 Excel 文件
                Set wbSource = Workbooks.Open(file.Path)
                Set wsSource = wbSource.Worksheets(1)
                For i = 2 To wsSource.UsedRange.Rows.Count '从第二行开始遍历数据行
                    wsTarget.Cells(rowIndex, 1) = folder.Name
                    For colIndex = 1 To wsSource.UsedRange.Columns.Count
                        wsTarget.Cells(rowIndex, colIndex + 1) = wsSource.Cells(i, colIndex)
                    Next colIndex
                    rowIndex = rowIndex + 1
                Next i
               
                wbSource.Close SaveChanges:=False
            End If
        Next file
    Next folder
Application.ScreenUpdating = True
MsgBox "合并完成!"
End Sub

登记表.rar

36.84 KB, 下载次数: 8

TA的精华主题

TA的得分主题

发表于 2024-5-19 09:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

改合并所有表,麻烦给个代码
谢谢!

TA的精华主题

TA的得分主题

发表于 2024-5-19 12:03 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
jjmysjg 发表于 2024-5-19 09:51
改合并所有表,麻烦给个代码
谢谢!

..............

Desktop.rar

35.67 KB, 下载次数: 13

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-11-17 13:47 , Processed in 0.039652 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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