ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] [已解决]灵活的多工作表合并或汇总

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-1-20 18:30 | 显示全部楼层 |阅读模式
搜索了论坛,有很多关于工作表合并汇总的帖子,总感觉缺乏灵活性和通用性。现有一种思路请求高手帮助实现。先行谢过!

[ 本帖最后由 wenwen000424 于 2009-2-18 18:51 编辑 ]

求助.rar

6.22 KB, 下载次数: 515

TA的精华主题

TA的得分主题

发表于 2009-1-21 10:23 | 显示全部楼层
wenwen000424_求助.zip (16.71 KB, 下载次数: 1265)

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-1-21 12:55 | 显示全部楼层
谢谢山版,基本实现了我的想法,缺憾的是表的列固定,不是根据要统计的工作表中不重复的列名自动得出的。希望能继续帮助。

TA的精华主题

TA的得分主题

发表于 2009-1-21 13:32 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-1-23 10:38 | 显示全部楼层
快过春节了,都忙着办年货去啦?没有人帮助解决,呜.....。无论如何,还是得先给大家拜个早年,祝大家新春快乐,牛年吉祥!

TA的精华主题

TA的得分主题

发表于 2009-1-23 13:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

回复 6楼 wenwen000424 的帖子

Sub yy()
    Dim i As Integer, k As Integer, r As Integer
    Dim s As Integer, w As Integer, sh As Worksheet
    Dim d As Object
    Dim arr(), arr2()
    Set d = CreateObject("scripting.dictionary")
    With Sheets("汇总")
        For i = 1 To .Range("iv3").End(xlToLeft).Column
            s = s + 1
            d(.Cells(3, i).Value) = s                         '记录汇总最大列数以及列名
        Next
        For Each sh In Sheets
            If sh.Name <> "汇总" Then
                Set rng = .Range("a1:iv1").Find(sh.Name, , , 1)
                If rng.Offset(, 1).Value = "√" Then
                    r = sh.Range("a65536").End(xlUp).Row
                    If r > 1 Then
                        ar = sh.Range("a1:f" & r)             '下面有 If ar(1, w) <> "" Then 所以范围可以稍许大一点
                        For i = 2 To UBound(ar)
                            k = k + 1
                            ReDim Preserve arr(1 To s, 1 To k)
                            For w = 1 To UBound(ar, 2)
                                If ar(1, w) <> "" Then arr(d(ar(1, w)), k) = ar(i, w)
                            Next
                        Next
                    End If
                End If
            End If
        Next
        .Range("a17").Resize(UBound(arr, 2), 6) = Application.Transpose(arr)   '这一段是合并
        
       Set d = CreateObject("scripting.dictionary")
        k = 0
        For i = 1 To UBound(arr, 2)
        If Not d.exists(arr(1, i)) Then
             k = k + 1
             d(arr(1, i)) = k
             ReDim Preserve arr2(1 To UBound(arr), 1 To k)
             For w = 1 To UBound(arr)
                arr2(w, d(arr(1, i))) = arr(w, i)
             Next
        Else
             For w = 2 To UBound(arr)
                 arr2(w, d(arr(1, i))) = arr2(w, d(arr(1, i))) + arr(w, i)
             Next
          End If
        Next
        .Range("a4").Resize(UBound(arr2, 2), 6) = Application.Transpose(arr2)  '这一段是汇总   
End With
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-1-23 15:24 | 显示全部楼层
谢谢office2008的帮助,先祝新春愉快,合家欢乐。请问不管是合并还是汇总能否将每个合并或汇总表中的标题栏(各项的名目)自动由所选择的各表中提取出来吗?山版的程序也是这个方面没有解决,现在只是个示例,每个表的项目很少,实际应用中项目会经常变化,数目也经常变化且会很多,工作表数目也会比现在多,肯请继续帮助!

TA的精华主题

TA的得分主题

发表于 2009-1-23 15:45 | 显示全部楼层
用我的roll up。。。 它可以实现从不同工作簿中不同工作表中的任意range提取及汇总。。。。。。

Roll_up.v3.rar

20.54 KB, 下载次数: 981

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-1-23 15:58 | 显示全部楼层
谢谢你的回复,你的这工具我试过了,不是很明白,能否弄个中文的,另外能否按我的要求思考一下?现在主要是项目名称的提取问题有些难度。

TA的精华主题

TA的得分主题

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

回复 10楼 wenwen000424 的帖子

程序中不是用数据字典处理了吗? 只要汇总的栏目包含所有 项目名称 ,那么问题解决
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-29 06:28 , Processed in 0.055431 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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