Excel精英培训网

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

[已解决]求助VBA程序-进行数据统计

[复制链接]
发表于 2012-1-30 17:11 | 显示全部楼层 |阅读模式
这个是我同学问的问题,我搞不定了,请大侠们解决一下。

具体要求见附件:
问题-汇总统计.rar (6.87 KB, 下载次数: 12)
发表于 2012-1-30 17:14 | 显示全部楼层
哈哈,我最近就在练习这样的题。
已经不难解决了。
最多10分钟给你答案
回复

使用道具 举报

发表于 2012-1-30 17:22 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sunjing-zxl 于 2012-1-30 17:24 编辑

  1. Sub 统计()
  2.     Dim d As New Dictionary
  3.     Dim d1 As New Dictionary
  4.     Dim arr1, arr2, arr3, arr4
  5.     Dim i As Long, j As Long
  6.     arr1 = Range("B2:D" & [B65536].End(xlUp).Row)
  7.     For i = 1 To UBound(arr1)
  8.         If Len(arr1(i, 1)) Then   '如果项目(既B列)不为空则:
  9.             If Not d1.Exists(arr1(i, 2)) Then
  10.                 '对工程(即C列)进行字典定位
  11.                 d1(arr1(i, 2)) = d1.Count + 1
  12.             End If
  13.             If Not d.Exists(arr1(i, 1)) Then
  14.                 d.Add arr1(i, 1), 1   '将项目(既B列)装入父字典
  15.                 Set d(arr1(i, 1)) = New Dictionary   '同时定义每个父字典元素的子字典
  16.             End If
  17.             If d(arr1(i, 1)).Exists(arr1(i, 2)) Then
  18.                 '如果子字典未赋值,则将工程值(即C列)作为其key值,D列(金额)值作为其item值进行赋值;否则将item进行累加
  19.                 d(arr1(i, 1))(arr1(i, 2)) = d(arr1(i, 1))(arr1(i, 2)) + arr1(i, 3)
  20.             Else
  21.                 d(arr1(i, 1)).Add arr1(i, 2), arr1(i, 3)
  22.             End If
  23.         End If
  24.     Next i
  25.     '字典数据处理
  26.     If d.Count > 0 Then    '如果父字典个数大于0
  27.         arr1 = d.Keys
  28.         arr2 = d1.Keys
  29.         ReDim arr3(1 To UBound(arr1) + 2, 1 To UBound(arr2) + 2)    '重定义数组大小,以备生成"汇总分析表"数据
  30.         For i = 0 To UBound(arr2)
  31.             arr3(1, i + 2) = arr2(i)
  32.         Next i
  33.         For i = 0 To UBound(arr1)
  34.             arr3(i + 2, 1) = arr1(i)
  35.             arr4 = d(arr1(i)).Keys
  36.             For j = 0 To UBound(arr4)
  37.                 arr3(i + 2, d1(arr4(j)) + 1) = d(arr1(i))(arr4(j))
  38.             Next j
  39.             Set d(arr1(i)) = Nothing
  40.         Next i
  41.         With Sheets("汇总分析表")
  42.             m = .Range("B2").End(xlDown).Row
  43.             n = .Range("C1").End(xlToRight).Column
  44.             .Range(.Cells(2, 1), .Cells(m, n)).ClearContents    '清除数据区域
  45.             .Range("B1").Resize(UBound(arr3), UBound(arr3, 2)) = arr3   '拷贝数组到"汇总分析表"中
  46.         End With
  47.     End If
  48.     Set d = Nothing
  49.     Set d1 = Nothing
  50.     MsgBox "汇总完成"
  51. End Sub
复制代码
问题-汇总统计-sunjing.rar (12.73 KB, 下载次数: 45)
回复

使用道具 举报

 楼主| 发表于 2012-1-30 17:55 | 显示全部楼层
高手,谢谢了               
回复

使用道具 举报

发表于 2012-1-31 20:23 | 显示全部楼层
能干人啊
回复

使用道具 举报

发表于 2012-1-31 20:31 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 05:29 , Processed in 0.276938 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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