ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 多表多条件汇总

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-4-30 09:11 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
已知“入库”和“出库”为数据源,用“VBA”生成“汇总”数据。希望各位大虾帮忙,谢谢!

工作簿1.zip

7.87 KB, 下载次数: 53

多表多条件汇总

TA的精华主题

TA的得分主题

发表于 2016-4-30 09:49 | 显示全部楼层
Sub 按钮1_Click()
    Set sh = ActiveSheet
    Application.ScreenUpdating = False
    Set d1 = CreateObject("scripting.dictionary")
    Set d2 = CreateObject("scripting.dictionary")
    arr = Sheets("入库").UsedRange
    For j = 2 To UBound(arr)
        d1(Format(arr(j, 1), "yyyy年m月") & "###" & arr(j, 2)) = d1(Format(arr(j, 1), "yyyy年m月") & "###" & arr(j, 2)) + arr(j, 3)
        d2(Format(arr(j, 1), "yyyy年m月") & "###" & arr(j, 2)) = d2(Format(arr(j, 1), "yyyy年m月") & "###" & arr(j, 2)) + arr(j, 4)
    Next j
    sh.UsedRange.Offset(2).ClearContents
    For j = 0 To d1.Count - 1
        Cells(j + 3, 1).Resize(1, 2) = Split(d1.keys()(j), "###")
        Cells(j + 3, 3) = d1.items()(j)
        Cells(j + 3, 4) = d2.items()(j)
    Next j
   
    arr = Sheets("出库").UsedRange
    d1.RemoveAll
    d2.RemoveAll
    For j = 2 To UBound(arr)
        d1(Format(arr(j, 1), "yyyy年m月") & "###" & arr(j, 2)) = d1(Format(arr(j, 1), "yyyy年m月") & "###" & arr(j, 2)) + arr(j, 3)
        d2(Format(arr(j, 1), "yyyy年m月") & "###" & arr(j, 2)) = d2(Format(arr(j, 1), "yyyy年m月") & "###" & arr(j, 2)) + arr(j, 4)
    Next j
    r = Cells(Rows.Count, 1).End(3).Row + 1
    For j = 3 To Cells(Rows.Count, 1).End(3).Row
        aa = Format(Cells(j, 1), "yyyy年m月") & "###" & Cells(j, 2)
        If d1.exists(Format(Cells(j, 1), "yyyy年m月") & "###" & Cells(j, 2)) Then
            Cells(j, 5) = d1(Format(Cells(j, 1), "yyyy年m月") & "###" & Cells(j, 2))
            Cells(j, 6) = d2(Format(Cells(j, 1), "yyyy年m月") & "###" & Cells(j, 2))

        End If
    Next j
   
    Application.ScreenUpdating = True
End Sub

TA的精华主题

TA的得分主题

发表于 2016-4-30 09:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
如果的月份及项目不少于出库,可以获取正常的结果,如果出库多需要变通

副本工作簿1.zip

19.44 KB, 下载次数: 75

TA的精华主题

TA的得分主题

发表于 2016-4-30 10:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 一指禅62 于 2016-4-30 10:33 编辑
  1. Sub 库存()
  2.     Dim arr, i&, brr(), n%, d As Object, s$
  3.     Set d = CreateObject("Scripting.Dictionary")
  4.     arr = Sheets("入库").Range("a1").CurrentRegion
  5.     For i = 2 To UBound(arr)
  6.         s = Format(arr(i, 1), "yyyy年mm月") & "|" & arr(i, 2)
  7.         If Not d.Exists(s) Then
  8.             n = n + 1: ReDim Preserve brr(1 To 4, 1 To n)
  9.             d(s) = n
  10.             brr(1, n) = arr(i, 3)
  11.             brr(2, n) = arr(i, 4)
  12.         Else
  13.             brr(1, d(s)) = brr(1, d(s)) + arr(i, 3)
  14.             brr(2, d(s)) = brr(2, d(s)) + arr(i, 4)
  15.         End If
  16.     Next
  17.    
  18.     arr = Sheets("出库").Range("a1").CurrentRegion
  19.     For i = 2 To UBound(arr)
  20.         s = Format(arr(i, 1), "yyyy年mm月") & "|" & arr(i, 2)
  21.         If Not d.Exists(s) Then
  22.             n = n + 1: ReDim Preserve brr(1 To 4, 1 To n)
  23.             d(s) = n
  24.             brr(3, n) = arr(i, 3)
  25.             brr(4, n) = arr(i, 4)
  26.         Else
  27.             brr(3, d(s)) = brr(3, d(s)) + arr(i, 3)
  28.             brr(4, d(s)) = brr(4, d(s)) + arr(i, 4)
  29.         End If
  30.     Next
  31.    
  32.     Sheet3.Select
  33.     Range("A3:M65536").ClearContents
  34.     Range("A3").Resize(d.Count, 2) = WorksheetFunction.Transpose(d.keys)
  35.     Range("C3").Resize(d.Count, 4) = WorksheetFunction.Transpose(brr)
  36.     Range("A:A").Replace "|*", ""
  37.     Range("B:B").Replace "*|", ""
  38. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2016-4-30 10:35 | 显示全部楼层



工作簿1.rar (17.62 KB, 下载次数: 81)



TA的精华主题

TA的得分主题

发表于 2016-4-30 12:13 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. Sub 汇总()
  2.     Dim CNN As Object
  3.     Dim SQL As String
  4.     Set CNN = CreateObject("ADODB.connection")
  5.     CNN.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR = yes';Data Source=" & ThisWorkbook.FullName
  6.     SQL = "select d.年月,d.物料代码,sum(d.入库数量),sum(d.入库金额),sum(d.出库数量),sum(d.出库金额) from (select str(year(日期))+'年'+trim(str(month(日期)))+'月' as 年月,物料代码,数量 as 入库数量,金额 as 入库金额,0 as 出库数量,0 as 出库金额 from [入库$] union all select str(year(日期))+'年'+trim(str(month(日期)))+'月' as 年月,物料代码,0 as 入库数量,0 as 入库金额,数量 as 出库数量,金额 as 出库金额 from [出库$]) as D where d.年月<>''group by d.年月,d.物料代码"
  7.     Sheets("汇总").Range("A3").CopyFromRecordset CNN.Execute(SQL)
  8.     CNN.Close
  9.     Set CNN = Nothing
  10. End Sub
复制代码

工作簿1.rar

14.99 KB, 下载次数: 74

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-4-30 12:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢各位!如果改成这样呢?见附件,谢谢!

2014年原料存货.zip

1.94 MB, 下载次数: 56

多条件多表汇总

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-4-30 12:38 | 显示全部楼层

谢谢!
这句调试不过
CNN.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR = yes';Data Source=" & ThisWorkbook.FullName

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-4-30 12:40 | 显示全部楼层
liulang0808 发表于 2016-4-30 09:49
Sub 按钮1_Click()
    Set sh = ActiveSheet
    Application.ScreenUpdating = False

非常谢谢!
换成7楼的文件如何处理?

TA的精华主题

TA的得分主题

发表于 2016-4-30 13:45 | 显示全部楼层
yanglaicun 发表于 2016-4-30 12:40
非常谢谢!
换成7楼的文件如何处理?

根据表格格式。代码对应调整就可以了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-9 15:47 , Processed in 0.029226 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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