ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何汇总近300张表?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2008-12-25 09:48 | 显示全部楼层
原帖由 gzwby 于 2008-12-24 11:01 发表
如果一个单位只上缴一个月度汇总表,哪有该怎么汇总?


“一个月度汇总表”指的是什么?
你现在不就是一个单位上缴“一个月度汇总表”吗?

TA的精华主题

TA的得分主题

发表于 2008-12-25 10:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 aa7338267 于 2008-12-25 09:03 发表
能够讲一下流程吗?

    Dim RG, WB$, SQL$, ST$, LJ As Object
    Set LJ = CreateObject("adodb.connection") '(抄的)
    WB = Dir(ThisWorkbook.Path & "\*.xls") '从本工作簿所在目录取Excel文件名
    Do While WB <> "" '如取到文件进入循环
        If WB <> ThisWorkbook.Name Then '取到文件不是本工作簿则进行处理
            LJ.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.Path & "\" & WB '与取到的文件连接(抄的)
            For i = 1 To 5 '处理01到05表
                SQL = "select * from [" & "0" & i & "$]"  '确定读入范围和表名(抄的)
                With Sheets("01-05") '选择目标:01-05表
                    .[a40].CopyFromRecordset LJ.Execute(SQL) '按读入范围将数据拷贝过来,临时放到40行以下(抄的)
                    RG = .Range("g43:i68") '将要处理的数据存入数组
                    For j = 5 To 30  '从5行到30行
                        For k = 7 To 9  '从7列到9列
                            .Cells(j, k).Value = .Cells(j, k).Value + RG(j - 4, k - 6)  '每个单元格的数值与数组对应值相加
                        Next k
                    Next j
                End With
            Next i
            For i = 6 To 10 '处理06到10表,方法同上
                SQL = "select * from [" & "0" & i & "$]"
                If i = 10 Then SQL = "select * from [10$]"  '对10特别处理,去掉前面的0
                With Sheets("06-10")
                    .[a40].CopyFromRecordset LJ.Execute(SQL)
                    RG = .Range("g43:i68")
                    For j = 5 To 30
                        For k = 7 To 9
                            .Cells(j, k).Value = .Cells(j, k).Value + RG(j - 4, k - 6)
                        Next k
                    Next j
                End With
            Next i
            For i = 11 To 15  '处理11到15表,方法同上
                SQL = "select * from [" & i & "$]"
                With Sheets("11-15")
                    .[a40].CopyFromRecordset LJ.Execute(SQL)
                    RG = .Range("g43:i68")
                    For j = 5 To 30
                        For k = 7 To 9
                            .Cells(j, k).Value = .Cells(j, k).Value + RG(j - 4, k - 6)
                        Next k
                    Next j
                End With
            Next i
            For i = 16 To 20  '处理16到20表,方法同上
                SQL = "select * from [" & i & "$]"
                With Sheets("16-20")
                    .[a40].CopyFromRecordset LJ.Execute(SQL)
                    RG = .Range("g43:i68")
                    For j = 5 To 30
                        For k = 7 To 9
                            .Cells(j, k).Value = .Cells(j, k).Value + RG(j - 4, k - 6)
                        Next k
                    Next j
                End With
            Next i
            For i = 21 To 24 '处理21到24表,方法同上
                SQL = "select * from [" & i & "$]"
                With Sheets("21-24")
                    .[a40].CopyFromRecordset LJ.Execute(SQL)
                    RG = .Range("g43:i68")
                    For j = 5 To 30
                        For k = 7 To 9
                            .Cells(j, k).Value = .Cells(j, k).Value + RG(j - 4, k - 6)
                        Next k
                    Next j
                End With
            Next i
            For i = 25 To 31  '处理25到31表,方法同上
                SQL = "select * from [" & i & "$]"
                With Sheets("25-31")
                    .[a40].CopyFromRecordset LJ.Execute(SQL)
                    RG = .Range("g43:i68")
                    For j = 5 To 30
                        For k = 7 To 9
                            .Cells(j, k).Value = .Cells(j, k).Value + RG(j - 4, k - 6)
                        Next k
                    Next j
                End With
            Next i
            LJ.Close  '关闭连接
        End If
        WB = Dir   '取下一个Excel文件名
    Loop
    Set LJ = Nothing

TA的精华主题

TA的得分主题

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

回复 8楼 hupanshan 的帖子

关于汇总大量表格的工作,我以前也遇到过,当初是借助VBA才能完成,但使用VBA有一个前提是每一个工作表格式必须完全一致,因为我的VBA只是按照地址来取值。
hupanshan你附件中的VBA代码中,我看了一下使用了SQL Select语言,我看的不是很懂,这是不是你所说的ADO啊,你能不能上传一份关于ADO学习的资料啊?非常感谢!

TA的精华主题

TA的得分主题

发表于 2008-12-25 20:41 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
不要误会,VBA是一种计算机语言,可以处理多种格式的表格。当然,规范的数据处理起来更容易一些。至于ADO,指的是一种数据访问接口,VBA可以应用这种接口进行操作。一般说来,处理Excel表的数据可以将工作簿打开装入内存,然后对有关的数据进行操作。但是,当要处理的表比较多时,这种打开装入内存,和退出内存关闭文件的操作耗费时间就比较多了。比方说,处理一个文件多花2秒钟的时间,300个文件就要多600秒,也就是10分钟。而用ADO的方式,速度稍微快一点。我对ADO的认识十分粗浅,只是用的时候抄人家一点东西。我提交的程序只是ADO的一种简单应用,就是 .[a40].CopyFromRecordset LJ.Execute(SQL),一次性把要用的数据拷贝到当前文件里,然后再用我熟悉的语句进行处理。

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-1-1 14:53 | 显示全部楼层
我的意思是每个月我收到便利店上交的月度汇总表,然后我再他们提供的报表的基础上再进行汇总。
附件中“便利店报表”是300多个便利店提供的,我要做的就是“所有便利店汇总”这个表。

便利店.rar

12.12 KB, 下载次数: 11

TA的精华主题

TA的得分主题

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

这下应该是更简单了

便利店销售报表.rar (47.88 KB, 下载次数: 56)

TA的精华主题

TA的得分主题

发表于 2009-1-2 21:01 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
高手啊.ADO是什么?没接触过

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-1-5 09:09 | 显示全部楼层

回复 17楼 hupanshan 的帖子

非常感谢!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-9-25 23:17 , Processed in 0.045847 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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