ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

跨文件数据汇总到总表

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-5-13 15:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
sulli112 发表于 2024-5-13 15:10
不好意思想请教一下,您这段代码市合并文件夹下工作簿数据吗?为啥我测试了一下,好像只合并第一份文件夹 ...

每个文件夹下面的工作簿数量是多于1个吗?如果是,那么代码要修改,因为我看到目前给出的样例,好像是每个文件夹下面就一个文件,所以代码设计成只读取一个文件。

TA的精华主题

TA的得分主题

发表于 2024-5-13 15:42 | 显示全部楼层
LIUZHU 发表于 2024-5-13 15:25
每个文件夹下面的工作簿数量是多于1个吗?如果是,那么代码要修改,因为我看到目前给出的样例,好像是每 ...

我测试了一下,1.每个工作簿只有一个表格,合并总表数据也是不完整,你看楼主的附件,数据上百条,但是我运行你的代码只有30条数据带过去2.如果多工作簿情况需要怎么修改呢

TA的精华主题

TA的得分主题

发表于 2024-5-13 15:50 | 显示全部楼层

您好,如果修改为A列数据也取的情况下,是不是只要修改红色列代码即可
Sub ykcbf()   '//2024.5.13
    Application.ScreenUpdating = False
    Dim fns As New Collection
    p = ThisWorkbook.Path & "\"
    Set sh = ThisWorkbook.Sheets("Sheet4")
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ff = fso.GetFolder(p)
    getFiles ff, fns, fso
    ReDim brr(1 To 10000, 1 To 300)
    For Each f In fns
        Set wb = Workbooks.Open(f, 0)
        With wb.Sheets(1)
            r = .Cells(Rows.Count, 1).End(3).Row
            c = .UsedRange.Columns.Count
            arr = .[a1].Resize(r, c)
        End With
        wb.Close False
        For i = 2 To UBound(arr)
            m = m + 1
            For j = 1 To UBound(arr, 2)
                brr(m, j) = arr(i, j)
            Next
        Next
    Next
    With sh
        .Rows(4 & ":" & 1000) = ""
        .[a4].Resize(m, c - 1) = brr
        .[a4].Resize(m, c - 1).Borders.LineStyle = 1
    End With
    Application.ScreenUpdating = True
    MsgBox "OK!"
End Sub

Function getFiles(ff, fns, fso)
    For Each f In ff.Files
        If InStr(f, "~$") = 0 Then
            If InStr(f, ThisWorkbook.Name) = 0 Then
                fns.Add f.Path
            End If
        End If
    Next
    For Each fd In ff.SubFolders
        getFiles fd, fns, fso
    Next
End Function


TA的精华主题

TA的得分主题

发表于 2024-5-13 17:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
sulli112 发表于 2024-5-13 15:50
您好,如果修改为A列数据也取的情况下,是不是只要修改红色列代码即可
Sub ykcbf()   '//2024.5.13
    ...

写入也有关系。

TA的精华主题

TA的得分主题

发表于 2024-5-13 18:33 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-5-13 18:43 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-5-13 19:09 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
ykcbf1100 发表于 2024-5-13 18:43
c-1改为C。。。

好的,非常感谢

TA的精华主题

TA的得分主题

发表于 2024-5-13 19:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. Sub test1() '练习,灌水增产……
  2.   
  3.   Dim i As Long, p As Long, iCount As Long
  4.   Dim Conn As Object, dict As Object ', Fso As Object
  5.   Dim strConn As String, strSQL As String, s As String
  6.   Dim path_ As String, files_(1 To 2345) As String
  7.   
  8.   path_ = ThisWorkbook.Path & "\"
  9. '  If Not GetFileName(Files_, Path_, ".xlsx") Then MsgBox "!": Exit Sub
  10.   GetFiles path_, CreateObject("Scripting.FileSystemObject"), files_(), iCount, "~$", ".xls"
  11.   If iCount = 0 Then MsgBox "!": Exit Sub
  12.   
  13.   p = 4
  14.   Rows(p & ":" & Rows.Count).ClearContents
  15.   
  16.   Application.ScreenUpdating = False
  17.   
  18.   Set Conn = CreateObject("ADODB.Connection")
  19.   Set dict = CreateObject("Scripting.Dictionary")
  20.   
  21.   s = "Excel 12.0;HDR=YES;IMEX=1;Database="
  22.   If Application.Version < 12 Then
  23.     s = Replace(s, "12.0", "8.0")
  24.     strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;HDR=YES';Data Source="
  25.   Else
  26.     strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=YES';Data Source="
  27.   End If
  28.   
  29.   strSQL = "SELECT * FROM [" & s & "[.File]].[$B1:BP] WHERE `Lot Number_批号` IS NOT NULL"
  30.   For i = 1 To iCount
  31.     If files_(i) <> ThisWorkbook.FullName Then
  32.       If Conn.State <> 1 Then Conn.Open strConn & files_(i)
  33.       dict.Add Replace(strSQL, "[.File]", files_(i)), ""
  34.       If dict.Count = 49 Then
  35.         Range("A" & p).CopyFromRecordset Conn.Execute(Join(dict.Keys, " UNION ALL "))
  36.         p = Cells.Find("*", , xlValues, , xlByRows, xlPrevious).Row + 1
  37.         dict.RemoveAll
  38.       End If
  39.     End If
  40.   Next
  41.   If dict.Count Then Range("A" & p).CopyFromRecordset Conn.Execute(Join(dict.Keys, " UNION ALL "))
  42.   
  43.   With ActiveSheet.UsedRange
  44.     .Borders.LineStyle = xlContinuous
  45.     .HorizontalAlignment = xlCenter
  46.   End With
  47.   
  48.   Conn.Close
  49.   Set Conn = Nothing
  50.   Set dict = Nothing
  51.   Application.ScreenUpdating = True
  52.   Beep
  53. End Sub

  54. Function GetFiles(path_ As String, Fso As Object, files_() As String, iCount As Long, strExclude As String, Optional strFilter As String = ".xls")
  55.   Dim folder_ As Object, file_ As Object
  56.   For Each folder_ In Fso.GetFolder(path_).SubFolders
  57.     For Each file_ In folder_.Files
  58.       If InStr(LCase(file_.Name), strFilter) Then
  59.         If Not file_.Name Like strExclude & "*" Then
  60.           iCount = iCount + 1
  61.           files_(iCount) = file_.Path
  62.         End If
  63.       End If
  64.     Next
  65.   Next
  66. End Function
复制代码

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-5-14 08:49 | 显示全部楼层

那的JS代码怎么能在EXCEL上使用

TA的精华主题

TA的得分主题

发表于 2024-5-14 09:37 | 显示全部楼层
jjmysjg 发表于 2024-5-14 08:49
那的JS代码怎么能在EXCEL上使用

抱歉,JSA代码不能在Excel用,只能在WPS2019版上用。
要在Excel上使用,必须转换成VBA代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 06:55 , Processed in 0.058645 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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