Excel精英培训网

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

[已解决]根据条件汇总数据

[复制链接]
发表于 2017-5-25 11:40 | 显示全部楼层 |阅读模式
各位老师好,我有一个数据想处理,判断不同时间,测试的样品数量和测试总时间,但是写的循环处理太慢,对于大数据量处理比较花时间,所以想请大神,有没有比较简洁的代码来处理。主要思路是根据source里不同的日期,譬如B列2016/1/5,找出有几个不同的DCSN,统计数量,放入Summary的B列,测试时间就是所有2016/1/5的Total Test Time相加的和,放入Summary的C列。
模板请参见附件,谢谢!

最佳答案
2017-5-25 13:58
源数据限定范围后,速度可以增加很多。

debug.zip

73.36 KB, 下载次数: 3

 楼主| 发表于 2017-5-25 12:31 | 显示全部楼层
回复

使用道具 举报

发表于 2017-5-25 13:51 | 显示全部楼层
请看附件。
QQ截图20170525135109.png

Debug.rar

85.48 KB, 下载次数: 10

回复

使用道具 举报

发表于 2017-5-25 13:58 | 显示全部楼层    本楼为最佳答案   
源数据限定范围后,速度可以增加很多。
QQ截图20170525135724.png

Debug.rar

86.36 KB, 下载次数: 9

回复

使用道具 举报

 楼主| 发表于 2017-5-25 14:01 | 显示全部楼层
grf1973 发表于 2017-5-25 13:58
源数据限定范围后,速度可以增加很多。

谢谢老师,已经字典法解决了,不过你的方法值得我学习一下
回复

使用道具 举报

发表于 2017-5-25 14:06 | 显示全部楼层
用数组字典速度会快10倍。
  1. Sub grf1()
  2.     tt = Timer
  3.     arr = Sheets("Source").[a1].CurrentRegion
  4.     ReDim brr(1 To UBound(arr), 1 To 3)
  5.     Set d = CreateObject("scripting.dictionary")
  6.     Set d1 = CreateObject("scripting.dictionary")
  7.     For i = 2 To UBound(arr)
  8.         rq = arr(i, 2): x = arr(i, 1) & rq
  9.         If Not d.exists(rq) Then
  10.             n = n + 1
  11.             brr(n, 1) = rq
  12.             d(rq) = n
  13.         End If
  14.         p = d(rq)
  15.         If Not d1.exists(x) Then
  16.             brr(p, 2) = brr(p, 2) + 1
  17.             d1(x) = ""
  18.         End If
  19.         brr(p, 3) = brr(p, 3) + arr(i, 3)
  20.     Next
  21.     [a2].Resize(n, 3) = brr
  22.     MsgBox Timer - tt
  23. End Sub
复制代码

Debug.rar

94.32 KB, 下载次数: 4

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 19:27 , Processed in 0.417462 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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