吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 950|回复: 8
收起左侧

[求助] 关于对特定(标准)格式下的N个Excel文件进行数据整合的求助

[复制链接]
Ilovecrack721 发表于 2022-7-27 13:46
这里需要可能需要懂Excel 中VBA 的同学予以友情支持下,具体希望操作的情况和要求如下:
  • 有一个标准格式的Excel表, 表内有多个Sheet 页面,需要提取内部不同sheet 中多组数据内容。
  • 会有很多个标准格式Excel表数据 在同一个文件夹路径下。
  • 该文件夹下会有一个汇总表,该表会自动汇总所有拖到此文件夹下的标准格式Excel表数据。即标准格式Excel表一单拖入此文件夹,汇总表就是更新(或者打开文件后手动更新)
  • 要求:将每一个Excel表中特定的数据和内容综合在总表上,可以统一浏览。
  • 可自定义:后期需要提取其他的数据内容也可以新增。


该求助需要一个操作说明,或者直接发一份已有的类似文件,方便参考,目的也是为了可以让广大数据搜集工作者有一个快速可以查找数据的工具和提高工作效率的方式,感谢大家的支持。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

wsfw33 发表于 2022-7-27 15:49
可以试试魔法网表
约定的童话 发表于 2022-7-27 16:22
JackLei 发表于 2022-7-27 17:17
根据你的需求可以适当更改,可以更改的地方已经标注了,将弹窗选取路径改为自己的绝对路径,就可以每次打开这个Excel文档,自动汇总本文档下的所有Excel,当然需要你自己加一句判断,If Workbook.Name <> "此处填写你的汇总文档名" then    此处为主代码  end if
---------文件启动就汇总多个路径下的文档----------------
[Visual Basic] 纯文本查看 复制代码
Private Sub Workbook_Open()
    Dim shtActive As Worksheet, rng As Range, shtData As Worksheet
    Dim nTitleRow As Long, k As Long, nLastRow As Long
    Dim i As Long, j As Long, nStartRow As Long
    Dim aData, aResult, nStarRng As Long
    Dim strPath As String, strFileName As String
    Dim strKey As String, nShtCount As Long
    With Application.FileDialog(msoFileDialogFolderPicker)
    '取得用户选择的文件夹路径,这里可以根据自己需求,可以写为绝对路径
        If .Show Then strPath = .SelectedItems(1) Else Exit Sub
    End With
    If Right(strPath, 1) <> "\" Then strPath = strPath & "\"
    strKey = InputBox("请输入需要合并的工作表所包含的关键词:" & vbCrLf & "如未填写关键词,则默认汇总全部表格数据", "提醒")
    If StrPtr(strKey) = 0 Then Exit Sub '如果点击了取消或者关闭按钮,则退出程序
    nTitleRow = Val(InputBox("请输入标题的行数,默认标题行数为1", "提醒", 1))
    If nTitleRow < 0 Then MsgBox "标题行数不能为负数。", 64, "警告": Exit Sub
    Set shtActive = ActiveSheet
    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
        .AskToUpdateLinks = False
    End With
    ReDim aResult(1 To 80000, 1 To 1) '声明结果数组
    Cells.ClearContents '清空当前表格数据
    Cells.NumberFormat = "@" '设置单元格为文本格式
    strFileName = Dir(strPath & "*.xls*") '使用Dir函数遍历excel文件
    Do While strFileName <> ""
        If strFileName <> ThisWorkbook.Name Then '避免同名文件重复打开出错
            With GetObject(strPath & strFileName)
            '以只读'形式读取文件时,使用getobject会比workbooks.open稍快
                For Each shtData In .Worksheets '遍历表
                    If InStr(1, shtData.Name, strKey, vbTextCompare) Then
                    '如果表中包含关键字则进行汇总(不区分关键词字母大小写)
                        Set rng = shtData.UsedRange
                        If rng.Count > 1 Then '判断工作表是否存在数据……
                            nShtCount = nShtCount + 1 '汇总工作表的数量
                            nStartRow = IIf(nShtCount = 1, 1, nTitleRow + 1) '判断遍历数据源是否应该扣掉标题行
                            aData = rng.Value '数据区域读入数组arr
                            If UBound(aData, 2) + 2 > UBound(aResult, 2) Then '动态调整结果数组brr的最大列数
                                ReDim Preserve aResult(1 To UBound(aResult), 1 To UBound(aData, 2) + 2)
                            End If
                            For i = nStartRow To UBound(aData) '遍历行
                                k = k + 1
                                aResult(k, 1) = strFileName '数组第一列放工作簿名称
                                aResult(k, 2) = shtData.Name '数组第二列放工作表名称
                                For j = 1 To UBound(aData, 2) '遍历列
                                    aResult(k, j + 2) = aData(i, j)
                                Next
                                If k > UBound(aResult) - 1 Then
                                '如果数据行数到达结果数组的上限,则将数据导入汇总表,并清空结果数组
                                    With shtActive
                                        nLastRow = .Cells(Rows.Count, 1).End(xlUp).Row '获取放置来源数据的位置
                                        If nLastRow = 1 Then '判断是否扣除标题行
                                            nStarRng = IIf(nTitleRow = 0, 1, 0)
                                            .Range("a1").Offset(nStarRng).Resize(k, UBound(aResult, 2)) = aResult
                                            .Range("a1:b1") = Array("来源工作簿名称", "来源工作表名称")
                                            '前两列放来源工作簿和工作表名称
                                        Else
                                            .Range("a1").Offset(nLastRow).Resize(k, UBound(aResult, 2)) = aResult
                                            '放结果数组的数据
                                        End If
                                    End With
                                    k = 0
                                    ReDim aResult(1 To UBound(aResult), 1 To UBound(aResult, 2))
                                    '重新设置结果数组
                                End If
                            Next
                        End If
                    End If
                Next
                .Close False '关闭工作簿
            End With
        End If
        strFileName = Dir '下一个excel文件
    Loop
    If k > 0 Then
        shtActive.Select '激活汇总表
        nLastRow = Cells(Rows.Count, 1).End(xlUp).Row '放置数据的位置
        If nLastRow = 1 Then '如果汇总表数据为空,说明需要汇总的数据没有超过结果数组的上限
             nStarRng = IIf(nTitleRow = 0, 1, 0)
             Range("a1").Offset(nStarRng).Resize(k, UBound(aResult, 2)) = aResult
             Range("a1:b1") = Array("来源工作簿名称", "来源工作表名称")
         Else
             Range("a1").Offset(nLastRow).Resize(k, UBound(aResult, 2)) = aResult
         End If
    End If
    With Application
        .ScreenUpdating = True
        .DisplayAlerts = True
        .AskToUpdateLinks = True
    End With
    MsgBox "一共汇总完成" & nShtCount & "个工作表"
End Sub
 楼主| Ilovecrack721 发表于 2022-7-28 13:02
wsfw33 发表于 2022-7-27 15:49
可以试试魔法网表

这个要安装软件,可能不好用!
2022-07-28_130022.png
 楼主| Ilovecrack721 发表于 2022-7-28 13:08
约定的童话 发表于 2022-7-27 16:22
上文件VBA代码可以搞定

文件发你? 然后把需要提取的内容和你说下, 帮忙建立一个带VBA的Excel?
 楼主| Ilovecrack721 发表于 2022-7-28 13:09
JackLei 发表于 2022-7-27 17:17
根据你的需求可以适当更改,可以更改的地方已经标注了,将弹窗选取路径改为自己的绝对路径,就可以每次打开 ...

发你一个需要提取内容的表格?帮忙看下,大侠?
JackLei 发表于 2022-7-28 14:52
Ilovecrack721 发表于 2022-7-28 13:09
发你一个需要提取内容的表格?帮忙看下,大侠?

我们公司文件全部加密,表格做好了是发不出去的,只能给你这个代码,你根据需求改一下绝对路径就行了
 楼主| Ilovecrack721 发表于 2022-7-28 21:37
JackLei 发表于 2022-7-28 14:52
我们公司文件全部加密,表格做好了是发不出去的,只能给你这个代码,你根据需求改一下绝对路径就行了

是否可以远程指导下?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 11:00

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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