Excel精英培训网

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

[已解决]按条件统计,SQL,数组或者字典都行,只要能够实现

[复制链接]
发表于 2014-5-13 15:41 | 显示全部楼层 |阅读模式
麻烦老师帮我看看附件中的求助,需要使用ADO的SQL语句来。如果能够用数组或者字典也行,反正只要能够完成就行。但是我明细中的数据一个月下来可能超过25W行,所以麻烦老师能够以ADO或者数组或者字典的方法来实现


SQL统计.zip (298.98 KB, 下载次数: 38)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2014-5-13 17:43 | 显示全部楼层
回复

使用道具 举报

发表于 2014-5-13 17:52 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2014-5-13 18:10 | 显示全部楼层
模拟了结果,先谢谢了

SQL统计.zip

300.21 KB, 下载次数: 7

回复

使用道具 举报

发表于 2014-5-13 19:48 | 显示全部楼层    本楼为最佳答案   
  1. Sub Macro1()
  2. Dim arr, brr, crr, d, d2, i&, zf$, zf2$, zf3$
  3. Set d = CreateObject("scripting.dictionary")
  4. Set d2 = CreateObject("scripting.dictionary")
  5. Range("b2:l60000").ClearContents
  6. arr = Sheet1.Range("a1").CurrentRegion
  7. ReDim brr(1 To UBound(arr), 1 To 5)
  8. ReDim crr(1 To UBound(arr), 1 To 5)
  9. zf = "中断访问+业务成功+完成问卷/不同意+指定预约"
  10. zf2 = "完成问卷/不同意+业务成功"
  11. zf3 = "业务成功"
  12. For i = 2 To UBound(arr)
  13.     x = Split(arr(i, 16))(0)
  14.     If Not d.exists(x) Then
  15.         s = s + 1
  16.         d(x) = s
  17.         brr(s, 1) = x
  18.         brr(s, 2) = 1
  19.         If InStr(zf, arr(i, 15)) Then brr(s, 3) = 1
  20.         If InStr(zf2, arr(i, 15)) Then brr(s, 4) = 1
  21.         If arr(i, 15) = zf3 Then brr(s, 5) = 1
  22.     Else
  23.         brr(d(x), 2) = brr(d(x), 2) + 1
  24.         If InStr(zf, arr(i, 15)) Then brr(d(x), 3) = brr(d(x), 3) + 1
  25.         If InStr(zf2, arr(i, 15)) Then brr(d(x), 4) = brr(d(x), 4) + 1
  26.         If arr(i, 15) = zf3 Then brr(d(x), 5) = brr(d(x), 5) + 1
  27.     End If
  28.     If Not d2.exists(arr(i, 12)) Then
  29.         s2 = s2 + 1
  30.         d2(arr(i, 12)) = s2
  31.         crr(s2, 1) = arr(i, 12)
  32.         crr(s2, 2) = 1
  33.         If InStr(zf, arr(i, 15)) Then crr(s2, 3) = 1
  34.         If InStr(zf2, arr(i, 15)) Then crr(s2, 4) = 1
  35.         If arr(i, 15) = zf3 Then crr(s2, 5) = 1
  36.     Else
  37.         crr(d2(arr(i, 12)), 2) = crr(d2(arr(i, 12)), 2) + 1
  38.         If InStr(zf, arr(i, 15)) Then crr(d2(arr(i, 12)), 3) = crr(d2(arr(i, 12)), 3) + 1
  39.         If InStr(zf2, arr(i, 15)) Then crr(d2(arr(i, 12)), 4) = crr(d2(arr(i, 12)), 4) + 1
  40.         If arr(i, 15) = zf3 Then crr(d2(arr(i, 12)), 5) = crr(d2(arr(i, 12)), 5) + 1
  41.     End If
  42. Next
  43. Range("b2").Resize(s, 5) = brr
  44. Range("h2").Resize(s2, 5) = crr
  45. Range("b2").Resize(s, 5).Sort [b2], Header:=xlGuess
  46. End Sub
复制代码

点评

厉害,高明  发表于 2014-5-13 23:28

评分

参与人数 1 +5 收起 理由
xpw6061 + 5 很给力!

查看全部评分

回复

使用道具 举报

发表于 2014-5-13 19:49 | 显示全部楼层
………………

统计.zip

278.19 KB, 下载次数: 31

评分

参与人数 1 +3 收起 理由
笨得很呀2007 + 3 赞一个!

查看全部评分

回复

使用道具 举报

发表于 2014-5-13 19:49 | 显示全部楼层
试试不行就删了哈,没用Sql哈

SQL统计.rar

173.21 KB, 下载次数: 16

评分

参与人数 1 +3 收起 理由
笨得很呀2007 + 3 赞一个!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2014-5-13 22:57 | 显示全部楼层
多谢楼上的两位老师,两个都可以,非常感谢。
回复

使用道具 举报

发表于 2014-5-13 23:30 | 显示全部楼层
笨得很呀2007 发表于 2014-5-13 17:43
顶一下。

SQL也是有解的

SQL统计.rar

305.1 KB, 下载次数: 29

评分

参与人数 1 +3 收起 理由
笨得很呀2007 + 3 赞一个!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2014-5-14 08:36 | 显示全部楼层
xpw6061 发表于 2014-5-13 23:30
SQL也是有解的

非常感谢,三位老师的回复都可以。谢谢
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 08:45 , Processed in 0.434198 second(s), 18 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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