Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1421|回复: 5

不打开工作簿根据工作表A列名称求和某列数据

[复制链接]
发表于 2021-10-16 13:59 | 显示全部楼层 |阅读模式
本帖最后由 zjwsm 于 2021-10-23 07:21 编辑

    我有文件夹,内有有几十或上百个工作簿,每个工作簿里只有一张工作表有数据,每个表格式相同,行数不确定,我想在不打开工作簿,根据A列工作表名称合计工作表E列、G列数据。


数据汇总.zip

40.19 KB, 下载次数: 14

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2021-10-16 15:01 | 显示全部楼层
祝順心,南無阿彌陀佛!

demo.rar

49.93 KB, 下载次数: 21

评分

参与人数 1学分 +1 收起 理由
hhxq001 + 1 我和小伙伴都惊呆了

查看全部评分

回复

使用道具 举报

发表于 2021-10-17 10:43 | 显示全部楼层
回复

使用道具 举报

发表于 2021-10-18 10:13 | 显示全部楼层
cutecpu 发表于 2021-10-16 15:01
祝順心,南無阿彌陀佛!

Ado方法参考:
  1. Sub Ado汇总数据()
  2.     Dim arr(1 To 1000, 1 To 3), SQL$, m%
  3.     Dim Cn As Object: Set Cn = CreateObject("adodb.connection")
  4.     Dim mPath As String: mPath = ThisWorkbook.Path & "\data"
  5.     Dim mFile As String: mFile = Dir(mPath & "*.xlsx")
  6.     Do
  7.         If mFile <> ThisWorkbook.Name Then
  8.             m = m + 1
  9.             Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & mPath & mFile
  10.             SQL = "Select sum(数量) as E列金额汇总,sum(金额) as G列金额汇总 From [Sheet1$A5:G]"
  11.             arr(m, 1) = mFile
  12.             arr(m, 2) = Cn.Execute(SQL)(0)
  13.             arr(m, 3) = Cn.Execute(SQL)(1)
  14.             Cn.Close
  15.         End If
  16.         mFile = Dir
  17.     Loop While mFile <> ""
  18.     With Sheets(1)
  19.         .Range("A2:C10000").ClearContents
  20.         .Range("A2").Resize(m, 3).Value = arr
  21.     End With
  22. End Sub
复制代码


点评

感恩大俠,讓樓主有其他解決方案。祝順心,南無阿彌陀佛!  发表于 2021-10-18 10:57
回复

使用道具 举报

发表于 2021-10-19 21:29 | 显示全部楼层
Sub test()
  Dim d As Object, Cn As Object, Rs As Object, Sq$, p$, f$
  Dim s$
  Application.ScreenUpdating = False
  Set d = CreateObject("Scripting.Dictionary")
  Set Cn = CreateObject("ADODB.Connection")
  Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.FullName
  p = ThisWorkbook.Path & "\数据\"
  f = Dir(p & "*.xlsx")
  Do While f <> ""
    If f <> ThisWorkbook.Name Then
      s = Replace(f, ".xlsx", "")
      Sq = "select '" & s & "' as 工作表名,sum(数量) as 汇总数量,sum(金额) as 汇总金额 FROM [Excel 12.0;Database=" & p & f & "].[$A5:G] WHERE 姓名 IS NOT NULL"
      d(Sq) = ""
    End If
    f = Dir
  Loop
  If d.Count Then
    Sq = Join(d.Keys, " UNION ALL ")
    Set Rs = Cn.Execute(Sq)
    Range("a2:c13").ClearContents
    Range("A" & Rows.Count).End(xlUp).Offset(1).CopyFromRecordset Rs
  End If
  Cn.Close
  Set Cn = Nothing
  Set Rs = Nothing
  Set d = Nothing
  Application.ScreenUpdating = True
End Sub
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-3-30 00:01 , Processed in 0.545182 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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