ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求租提取所有文件夹中同一列数据生成一张汇总报表

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-7-13 09:59 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
附件中有一汇总表,能否用VBA的方式将所有文件夹下的工作簿中汇总工作表的C列数据提取到汇总表中,并在最后一列生成总额 17年6月份报表.rar (499.63 KB, 下载次数: 20)

TA的精华主题

TA的得分主题

发表于 2018-7-13 10:05 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
多夹多薄指定表合并或汇总成一薄一表

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-13 10:06 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-7-13 10:17 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-7-13 10:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 魂断蓝桥 于 2018-7-13 10:48 编辑

Option Explicit
Dim arr(1 To 50, 1 To 2), i As Integer
Sub Test()
Dim cnn, sql$, j%, n%, wjm$, BRR, CRR
Set cnn = CreateObject("ADODB.CONNECTION")
i = 0
Sea ThisWorkbook.Path & "\"
    For j = 1 To i
     If arr(i, 2) <> ThisWorkbook.Name Then
        n = n + 1
        If n = 1 Then
           cnn.Open "Provider=Microsoft.Jet.OleDb.4.0;Extended Properties='Excel 8.0;HDR=NO';Data Source=" & arr(i, 1)
           sql = "SELECT F1,F3 FROM [汇总$a5:c65] "
        Else
           sql = sql & " UNION ALL SELECT F1,F3 FROM [Excel 8.0;Database=" & arr(i, 1) & "].[汇总$a5:c65]  "
        End If
     End If
Next
    sql = "SELECT F1,SUM(F3) FROM (" & sql & ") GROUP BY F1"
BRR = cnn.Execute(sql).GETROWS
Set cnn = Nothing
CRR = [A5:A65]
For i = 1 To UBound(CRR)
    For j = 0 To UBound(BRR, 2)
        If CRR(i, 1) = BRR(0, j) Then
            If CRR(i, 1) = "4" Then
                CRR(i, 1) = BRR(1, j) / n
            Else
                CRR(i, 1) = BRR(1, j)
            End If
            Exit For
        End If
    Next
Next
[E5].Resize(UBound(CRR), 1) = CRR
End Sub

    Sub Sea(P)
    Dim f As Object
    For Each f In CreateObject("scripting.FileSystemObject").GetFolder(P).Files
      If f.Name Like "*.xls*" And f.Name <> ThisWorkbook.Name And Left(f.Name, 1) <> "~" Then
        i = i + 1
        arr(i, 1) = f.Path '& f.Name
        arr(i, 2) = f.Name '& f.Name
      End If
    Next
    For Each f In CreateObject("scripting.FileSystemObject").GetFolder(P).SubFolders
      Sea f
    Next
    End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-7-13 11:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
魂断蓝桥 发表于 2018-7-13 10:47
Option Explicit
Dim arr(1 To 50, 1 To 2), i As Integer
Sub Test()

大侠好!
能写个非SQL的代码吗
谢谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-13 11:09 | 显示全部楼层
调试的时候提示:运行错误,数据库引擎找不到对象:汇总$a5:c65,是啥原因呀

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-13 11:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
魂断蓝桥 发表于 2018-7-13 10:47
Option Explicit
Dim arr(1 To 50, 1 To 2), i As Integer
Sub Test()

调试的时候提示:运行错误,数据库引擎找不到对象:汇总$a5:c65,是啥原因呀。另外以后场所多了,各场所的表会不断增加,能否在第四行的每一列自动提取场所代码,就是文件名B表前面1706-后面的字母和数字,如JZ03,JZ05,JZ06,JZ07等。

TA的精华主题

TA的得分主题

发表于 2018-7-13 14:52 | 显示全部楼层
dagal 发表于 2018-7-13 11:17
调试的时候提示:运行错误,数据库引擎找不到对象:汇总$a5:c65,是啥原因呀。另外以后场所多了,各场所 ...

以你的附加测试没有问题。
第四行的每一列自动提取场所代码 ,没看懂,你这个是合计的数值(一个值是16个文件汇总得来的。),如何列出场所?


1.gif


TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-13 14:58 | 显示全部楼层
魂断蓝桥 发表于 2018-7-13 14:52
以你的附加测试没有问题。
第四行的每一列自动提取场所代码 ,没看懂,你这个是合计的数值(一个值是16 ...

我的意思是这一行做为场所的代码,目前是16个文件,以后如果多了,是否支持向右扩容。这个代码就以文件名中的代码写到这一行里,这样才知道哪一列是哪个场所的
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-10 11:28 , Processed in 0.026786 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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