ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] VBA里编写用数组进行多条件汇总求和

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-8-8 10:32 | 显示全部楼层 |阅读模式
各位大师大家好,小弟是一个初学VBA编程的小生,代码写到一半了,再往下不会了,想求助各位老师帮忙。怎样才能实现在数组了面多条件分类汇总求和,最后的效果如附件所示!因为数据量太大所以急求~~~~~~~小弟在这里跪谢了!!!!

已经加入到数组的内容

已经加入到数组的内容

汇总后的效果

汇总后的效果

数据源

数据源

焊接比例统计表.rar

9.03 KB, 下载次数: 79

TA的精华主题

TA的得分主题

发表于 2019-8-8 11:00 | 显示全部楼层
数组+字典完成。检测比例那个,不知如何得到,未给你计算。
Sub test()
        Dim arr, i%, d(1 To 9) As Object, sh As Worksheet, sht As Worksheet, j%, k%, s
        Set sh = Sheets("数据源")'你数据源表名“数据源”的源后有一空格,请删除,否则此处报错。
        Set sht = Sheets("汇总表")
        sht.Range("a3:i60000").ClearContents
        arr = sh.[a1].CurrentRegion
        For i = 1 To 9
                Set d(i) = CreateObject("scripting.dictionary")
        Next i
        For j = 2 To UBound(arr)
                s = arr(j, 6)
                d(1)(s) = arr(j, 1)
                d(2)(s) = arr(j, 2)
                d(3)(s) = arr(j, 3)
                d(4)(s) = d(4)(s) + arr(j, 4)
                d(5)(s) = d(5)(s) + arr(j, 5)
                d(6)(s) = arr(j, 6)
                d(7)(s) = d(7)(s) + arr(j, 7)
                d(8)(s) = d(8)(s) + arr(j, 8)
                d(9)(s) = d(9)(s) + arr(j, 9)
        Next j
        For k = 1 To 9
                sht.Cells(3, k).Resize(d(k).Count) = Application.Transpose(d(k).items)
        Next k
End Sub

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-8-8 11:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
字典+数组比较合适,标题可以手动做好

TA的精华主题

TA的得分主题

发表于 2019-8-8 11:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
多条件统计的代码:
2019-8-8多条件.png

TA的精华主题

TA的得分主题

发表于 2019-8-8 11:08 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Sub lkyy()
Set cnn = CreateObject("ADODB.Connection")
cnn.Open "provider=microsoft.ace.oledb.12.0;extended properties=excel 12.0;data source=" & ThisWorkbook.FullName
Sql = "select 管道编号,材质,`规  格mm`,sum(焊口总数) as 焊口总数,sum(固定口) as 固定口,施焊焊工,sum(施焊数量) as 施焊数量,sum(已检测总数) as 已检测总数,sum(已检测固定口数) as 已检测固定口数 from [数据源 $a:i]  "
Sql = Sql & " group by 管道编号,材质,`规  格mm`,施焊焊工"
Range("a3").CopyFromRecordset cnn.Execute(Sql)
Set cnn = Nothing
End Sub

yy5s.zip

16.41 KB, 下载次数: 120

评分

4

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-8-8 11:20 | 显示全部楼层
凌空一羽 发表于 2019-8-8 11:08
Sub lkyy()
Set cnn = CreateObject("ADODB.Connection")
cnn.Open "provider=microsoft.ace.oledb.12.0; ...

ADO+SQL这个方法更好更方便

TA的精华主题

TA的得分主题

发表于 2019-8-8 14:16 | 显示全部楼层
Option Explicit

Sub test()
  Dim arr, pos(1), i, j, k, m, t, dic
  Set dic = CreateObject("scripting.dictionary")
  pos(0) = Array(1, 2, 3, 6)
  pos(1) = Array(4, 5, 7, 8, 9)
  arr = Sheets("数据源 ").[a1].CurrentRegion.Offset(1).Resize(, 10)
  For i = 1 To UBound(arr, 1) - 1
    t = arr(i, pos(0)(0))
    For j = 1 To UBound(pos(0))
      t = t & arr(i, pos(0)(j))
    Next
    If dic.exists(t) Then
      For k = 0 To UBound(pos(1))
        arr(dic(t), pos(1)(k)) = arr(dic(t), pos(1)(k)) + arr(i, pos(1)(k))
      Next
    Else
      m = m + 1: dic(t) = m
      For k = 1 To UBound(arr, 2) - 1
        arr(m, k) = arr(i, k)
      Next
    End If
  Next
  For i = 1 To m
    If arr(i, 8) <> 0 Then arr(i, 10) = arr(i, 4) / arr(i, 8) * 100
  Next
  With Sheets("汇总表").[a3]
    .Resize(Rows.Count - 2, UBound(arr, 2) + 1).ClearContents
    .Resize(m, UBound(arr, 2)) = arr
  End With
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-8 18:11 | 显示全部楼层
网海遨游 发表于 2019-8-8 11:00
数组+字典完成。检测比例那个,不知如何得到,未给你计算。
Sub test()
        Dim arr, i%, d(1 To 9)  ...

你给的这个代码,用我自己加入到数组的数据,计算不了,不过还是非常感谢你在百忙之中帮助我!!!非常感谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-8 18:12 | 显示全部楼层
w609053988 发表于 2019-8-8 11:02
字典+数组比较合适,标题可以手动做好

谢谢你的帮助!!但是字典还没能学明白,还在学习当中。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-8 18:14 | 显示全部楼层
蓝桥玄霜 发表于 2019-8-8 11:03
多条件统计的代码:

谢谢你的帮助,谢谢!!!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 20:43 , Processed in 0.040551 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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