ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] VBA多条件统计计数的问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-9-14 14:30 | 显示全部楼层 |阅读模式
寻求大神帮助,需要多个条件计数统计,由于数据量较大,用countifs函数运行速度太慢,请大神给帮忙编个VBA程序,在此多多感谢。

统计.zip

23.58 KB, 下载次数: 67

TA的精华主题

TA的得分主题

发表于 2018-9-14 15:13 | 显示全部楼层
  1. Sub test()
  2.   Dim r%, i%
  3.   Dim arr, brr
  4.   Dim d As Object
  5.   Set d1 = CreateObject("scripting.dictionary")
  6.   Set d2 = CreateObject("scripting.dictionary")
  7.   Set d3 = CreateObject("scripting.dictionary")
  8.   Set d4 = CreateObject("scripting.dictionary")
  9.   With Worksheets("问题明细")
  10.     arr = .Range("h2:h4")
  11.     For i = 1 To UBound(arr)
  12.       If Len(arr(i, 1)) <> 0 Then
  13.         d1(arr(i, 1)) = ""
  14.       End If
  15.     Next
  16.     .Range("i10:bp41").ClearContents
  17.     brr = .Range("h8:bp41")
  18.     For i = 3 To UBound(brr) - 2
  19.       d2(brr(i, 1)) = i
  20.     Next
  21.     For j = 2 To UBound(brr, 2)
  22.       xm = brr(1, j) & "+" & brr(2, j)
  23.       d3(xm) = j
  24.     Next
  25.     r = .Cells(.Rows.Count, 1).End(xlUp).Row
  26.     arr = .Range("a2:d" & r)
  27.     For i = 1 To UBound(arr)
  28.       If d1.exists(arr(i, 4)) Then
  29.         If d2.exists(arr(i, 1)) Then
  30.           m = d2(arr(i, 1))
  31.         Else
  32.           m = d2("其他")
  33.         End If
  34.         xm = arr(i, 2) & "+" & arr(i, 3)
  35.         If d3.exists(xm) Then
  36.           n = d3(xm)
  37.           brr(m, n) = brr(m, n) + 1
  38.         End If
  39.       End If
  40.     Next
  41.   End With
  42.   With Worksheets("生产数量")
  43.     r = .Cells(.Rows.Count, 1).End(xlUp).Row
  44.     arr = .Range("a2:c" & r)
  45.     For i = 1 To UBound(arr)
  46.       If d1.exists(arr(i, 3)) Then
  47.         xm = Replace(arr(i, 1), ".", "+")
  48.         d4(xm) = d4(xm) + arr(i, 2)
  49.       End If
  50.     Next
  51.   End With
  52.   For j = 2 To UBound(brr, 2)
  53.     For i = 3 To 32
  54.       brr(33, j) = brr(33, j) + brr(i, j)
  55.     Next
  56.     xm = brr(1, j) & "+" & brr(2, j)
  57.     If d4.exists(xm) Then
  58.       brr(34, j) = d4(xm) - brr(33, j)
  59.     End If
  60.   Next
  61.   With Worksheets("问题明细")
  62.     .Range("h8:bp41") = brr
  63.   End With
  64. End Sub

复制代码

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-9-14 15:13 | 显示全部楼层
详见附件。

统计.rar

41.37 KB, 下载次数: 125

评分

4

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-9-14 16:12 | 显示全部楼层
本帖最后由 xiangbaoan 于 2018-9-17 11:42 编辑

……已做出来了,仅供测试……

经楼主反馈,9月17日补充:
把附件中
y = IIf(d.exists(br(r, 1)), d(br(r, 1)), d("其他"))
改成
y = IIf(Len(d(br(r, 1))), d(br(r, 1)), d("其他"))

统计.rar

34.19 KB, 下载次数: 63

评分

4

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-9-16 18:41 | 显示全部楼层
本帖最后由 xiangbaoan 于 2018-9-17 09:32 编辑

楼主,你要反馈!

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-17 09:03 | 显示全部楼层
xiangbaoan 发表于 2018-9-16 18:41
楼主:
注册时间2009-1-5
最后登录2018-9-15

多谢大神,主要是周六、周天休息,数据在公司电脑上,所以没测试
您编写的程序很好,还有一个问题,就是数据量很多,出现下标越界的问题


我现在数据超过了7万多行,显示下标越界
360截图20180917090205388.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-17 09:06 | 显示全部楼层

谢谢老师,不过没有达到想要的效果,下面一位老师给出了想要的效果,在此也非常感谢您的回复。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-9-17 09:12 | 显示全部楼层
xiangbaoan 发表于 2018-9-16 18:41
楼主:
注册时间2009-1-5
最后登录2018-9-15

由于数据量大,超过上传的限制,所以附件无法上传,请大神帮忙修改一下,谢谢
360截图20180917090802265.jpg

TA的精华主题

TA的得分主题

发表于 2018-9-17 09:20 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-9-17 09:40 | 显示全部楼层
gzh491 发表于 2018-9-17 09:12
由于数据量大,超过上传的限制,所以附件无法上传,请大神帮忙修改一下,谢谢

若行,可将附件发送到,我的用户名 艾特  qq  点  com,有空时义务帮忙再搞一下。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-15 18:34 , Processed in 0.029119 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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