ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

求助!!!!多表不同表头怎么合并啊??拜托了

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-2-9 22:54 | 显示全部楼层 |阅读模式
求助!!!!多表不同表头怎么合并啊??拜托了

临时.zip

41.06 KB, 下载次数: 5

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-2-9 22:55 | 显示全部楼层
求助各位大神了,如何把这三个工作簿里的三个工作表合并成新的一张表啊VBA,拜托了(需要普适性,换个表头还能用的))

TA的精华主题

TA的得分主题

发表于 2022-2-10 06:41 来自手机 | 显示全部楼层
yy1506697381 发表于 2022-2-9 22:55
求助各位大神了,如何把这三个工作簿里的三个工作表合并成新的一张表啊VBA,拜托了(需要普适性,换个表头 ...

一定要要vba?

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-2-10 10:34 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2022-2-10 12:16 来自手机 | 显示全部楼层
yy1506697381 发表于 2022-2-10 10:34
是呀,因为想做成普适性

普适性?跨平台?
vba不能在手机上运行吧!
不过vba的确是比较方便在excel环境运行的。

Screenshot_2022-02-10-06-27-17-467_com.android.chrome.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-2-11 11:23 | 显示全部楼层
Sub ComData()
    Dim sPath As String
    '选择文件夹
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show Then
            sPath = .SelectedItems(1)
            sPath = sPath & IIf(VBA.Right(sPath, 1) = "\", "", "\")
        Else
            End
        End If
    End With
   
    Dim file As String, ShtCount As Long
    Dim dTitle As Object, dData As Object
    Dim Sht As Worksheet, wb As Workbook
    file = Dir(sPath & "*.xl*")
    Set dTitle = CreateObject("Scripting.dictionary")
    Set dData = CreateObject("Scripting.dictionary")
   
    Dim ShtName As String, wbName As String
   
    t = Timer
    '标题和数据分别装入字典备用
    Application.ScreenUpdating = False
    Do While Len(file) > 0
        Set wb = Workbooks.Open(sPath & file, False, True)
        For Each Sht In wb.Worksheets
            ShtCount = ShtCount + 1
            arr = Sht.Range("A1").CurrentRegion.Value
            ShtName = Sht.Name '工作表名称
            wbName = Split(wb.Name, ".")(0) '文件名
            dData(wbName & "|" & ShtName) = arr
            For i = 1 To UBound(arr, 2)
                If Not dTitle.exists(arr(1, i)) Then
                   k = k + 1
                   dTitle(arr(1, i)) = k
                End If
            Next
        Next
        
        wb.Close 0
        file = Dir
    Loop
    Application.ScreenUpdating = True
   
    Dim brr()
    '+2 文件名+表名
    ReDim brr(1 To 100000, 1 To dTitle.Count + 2)
   
    For Each eve In dData.keys()
        arr = dData(eve)
        For i = 2 To UBound(arr)
            n = n + 1
            tp = Split(eve, "|")
            brr(n, 1) = tp(0) '文件名
            brr(n, 2) = tp(1) '表名
            For j = 1 To UBound(arr, 2)
                brr(n, dTitle(arr(1, j)) + 2) = arr(i, j)
            Next
        Next
    Next
   
    '写入汇总表,没有的自己建一个
    With Sheets("汇总表")
        .Cells.Clear
        .Range("A1:B1") = Array("文件名", "表名")
        .Range("C1").Resize(1, dTitle.Count) = dTitle.keys()
        .Range("A2").Resize(n, dTitle.Count + 2) = brr
    End With
   
    MsgBox "汇总完成!共汇总:" & ShtCount & "个表!" _
    & vbCrLf & "用时:" & Format(Timer - t, "0.00s")
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-2-11 11:24 | 显示全部楼层
能否请大神帮我改一下代码,从第三行开始取数呀,这个代码是从第一行开始取的

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-2-11 12:49 来自手机 | 显示全部楼层
yy1506697381 发表于 2022-2-11 11:24
能否请大神帮我改一下代码,从第三行开始取数呀,这个代码是从第一行开始取的

想以第三行为表头
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-28 14:09 , Processed in 0.036876 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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