ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请教多工作簿合并汇总问题!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-8-14 18:27 | 显示全部楼层 |阅读模式
各位江湖大佬,请援手抽空帮我解决下我的多工作簿合并汇总问题,本人初入江湖能力有限,望侠士们拔刀相助,万分感谢!!

多工作簿合并汇总文件夹.rar

70.84 KB, 下载次数: 9

TA的精华主题

TA的得分主题

发表于 2024-8-14 19:27 | 显示全部楼层
附件供参考。。。

2024月度奖金发放表.zip

76.9 KB, 下载次数: 13

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-8-14 19:28 | 显示全部楼层
参与一下。。。

  1. Sub ykcbf()   '//2024.8.14  排重汇总
  2.     Application.ScreenUpdating = False
  3.     Application.DisplayAlerts = False
  4.     Set fso = CreateObject("Scripting.FileSystemObject")
  5.     p = ThisWorkbook.Path & ""
  6.     Set sh = ThisWorkbook.Sheets("2024奖金发放汇总")
  7.     Set d = CreateObject("Scripting.Dictionary")
  8.     a = [{"1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","年终奖"}]
  9.     ReDim brr(1 To 10000, 1 To 100)
  10.     Dim tm: tm = Timer
  11.     p = ThisWorkbook.Path & ""
  12.     On Error Resume Next
  13.     For Each f In fso.GetFolder(p).Files
  14.         If LCase$(f.Name) Like "*.xls*" Then
  15.             If InStr(f.Name, ThisWorkbook.Name) = 0 Then
  16.                 fn = fso.GetBaseName(f)
  17.                 st = Replace(fn, "份奖金发放表", "")
  18.                 yf = Mid(st, 8)
  19.                 Set wb = Workbooks.Open(f, 0)
  20.                 With wb.Sheets(1)
  21.                     r = .Cells(Rows.Count, 1).End(3).Row
  22.                     c = .UsedRange.Columns.Count
  23.                     arr = .[a1].Resize(r, c)
  24.                     wb.Close False
  25.                 End With
  26.                 For i = 4 To UBound(arr)
  27.                     s = arr(i, 2)
  28.                     If s <> Empty Then
  29.                         If Not d.exists(s) Then
  30.                             m = m + 1
  31.                             d(s) = m
  32.                             brr(m, 1) = m
  33.                             brr(m, 2) = s
  34.                         End If
  35.                         r = d(arr(i, 2))
  36.                         n = 2
  37.                         For x = 1 To UBound(a)
  38.                             If yf = a(x) Then
  39.                                 n = n + x
  40.                                 Exit For
  41.                             End If
  42.                         Next
  43.                         brr(r, n) = brr(r, n) + arr(i, 4)
  44.                     End If
  45.                 Next
  46.             End If
  47.         End If
  48.     Next f
  49.     With sh
  50.         .UsedRange.Offset(2).Clear
  51.         .[a2].Resize(1, 15).Interior.Color = 49407
  52.         With .[a3].Resize(m, 15)
  53.             .Value = brr
  54.             .Borders.LineStyle = 1
  55.             .HorizontalAlignment = xlCenter
  56.             .VerticalAlignment = xlCenter
  57.         End With
  58.         For i = 3 To m + 2
  59.             .Cells(i, 15) = Application.Sum(.Cells(i, 3).Resize(, 13))
  60.         Next
  61.     End With
  62.     Set d = Nothing
  63.     Application.ScreenUpdating = True
  64.     MsgBox "共用时:" & Format(Timer - tm) & "秒!"
  65. End Sub
复制代码


评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-8-14 19:38 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
关键字:union all+pivot
GIF 2024-08-14 19-37-35.gif

limonet.zip

76.65 KB, 下载次数: 11

TA的精华主题

TA的得分主题

发表于 2024-8-14 19:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Sub limonet()
    Dim Cn As Object, StrSQL$, Path$, Filename$
    Range("A:F").ClearContents
    Set Cn = CreateObject("Adodb.Connection")
    Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.FullName
    Path = ThisWorkbook.Path & "\"
    Filename = Dir(Path & "*.xlsx")
    Do While Filename <> ""
        StrSQL = StrSQL & " Union All Select *," & Split(Split(Filename, "月")(0), "年")(1) & " as Mon From [Excel 12.0;DataBase=" & Path & Filename & "].[Sheet1$B3:C] Where 姓名<>''"
        Filename = Dir
    Loop
    StrSQL = "TransForm Sum(应发金额) Select 姓名 From (" & Mid(StrSQL, 12) & ") Group By 姓名 Pivot Mon"
    Set Rst = Cn.Execute(StrSQL)
    For j = 0 To Rst.Fields.Count - 1
        Cells(1, j + 1) = Rst.Fields(j).Name
    Next j
    Range("A2").CopyFromRecordset Rst
End Sub

TA的精华主题

TA的得分主题

发表于 2024-8-14 21:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
ub qs()
    Dim fso As Object, dic As Object
    Dim folderPath As String
    Dim file As Object
    Dim wb As Workbook, xb As Workbook
Set wb = ThisWorkbook
brr = Sheet1.Range("a2:o" & Sheet1.Range("b2").End(xlDown).Row)
Set dic = CreateObject("scripting.dictionary")
ph = ThisWorkbook.Path
    ' 创建FileSystemObject对象
    Application.ScreenUpdating = False
    Set fso = CreateObject("Scripting.FileSystemObject")
    ' 设置要遍历的文件夹路径
    folderPath = ph
    ' 检查文件夹是否存在
    If fso.FolderExists(folderPath) Then
        ' 获取文件夹
        Set folder = fso.GetFolder(folderPath)
        ' 遍历文件夹中的所有文件
        For Each file In folder.Files
            ' 检查文件是否是Excel文件
            If LCase(fso.GetExtensionName(file.Name)) = "xlsx" Or _
               LCase(fso.GetExtensionName(file.Name)) = "xls" Then
                ' 这里是文件名
                Debug.Print file.Name
                Set xb = Workbooks.Open(ph & "\" & file.Name, 0)
                arr = xb.Sheets(1).Range("a2").CurrentRegion.Value
                xb.Close (0)
                    For i = 4 To UBound(arr)
                        If arr(i, 2) <> "" Then
                            dic(arr(i, 2)) = arr(i, 4)
                        End If
                    Next
                  For b = 3 To UBound(brr, 2)
                    If InStr(file.Name, brr(1, b)) Then
                        cl = b
                        Exit For
                    End If
                  Next
                For x = 2 To UBound(brr)
                    If brr(x, 2) <> Empty Then
                    brr(x, b) = dic(brr(x, 2))
                    brr(x, UBound(brr, 2)) = brr(x, UBound(brr, 2)) + brr(x, b)
                    End If
                Next
               
            End If
            dic.RemoveAll
        Next file
    Else
        MsgBox "指定的文件夹不存在。"
    End If
    Sheet1.Range("a2").Resize(UBound(brr), UBound(brr, 2)) = brr
    ' 清理
    Set fso = Nothing: Set wb = Nothing
    Set folder = Nothing: Set xb = Nothing: Set dic = Nothing
    Application.ScreenUpdating = True
End Sub

TA的精华主题

TA的得分主题

发表于 2024-8-14 21:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
试试..........
PixPin_2024-08-14_21-32-41.gif

TA的精华主题

TA的得分主题

发表于 2024-8-14 21:35 | 显示全部楼层
试试.........

fso多工作簿合并汇总.rar

76.28 KB, 下载次数: 12

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

本版积分规则

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

GMT+8, 2024-11-18 12:34 , Processed in 0.037155 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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