Excel精英培训网

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

[已解决]又一个让人疼的问题,试到现在也没成功,请老师指点

[复制链接]
发表于 2012-12-26 22:45 | 显示全部楼层 |阅读模式
我有个表中有好多数据,要对其中医院进行汇总统计,如何用VBA进行呢?问题在表中有说明。先对关注问题的老师进行感谢。 Book1.rar (81.47 KB, 下载次数: 23)
发表于 2012-12-26 23:02 | 显示全部楼层
这个,真心不用V来解决啊
数据透视表就完全可以搞定了.(PS:楼主的这个表格格式做得非常好,最适合做数透的表格布局)

Book1.zip

388.46 KB, 下载次数: 4

评分

参与人数 1 +1 金币 +5 收起 理由
suye1010 + 1 + 5 很给力!

查看全部评分

回复

使用道具 举报

发表于 2012-12-26 23:03 | 显示全部楼层
去看看数透公开课的录相吧,对你有帮助。
回复

使用道具 举报

发表于 2012-12-26 23:12 | 显示全部楼层    本楼为最佳答案   
本帖最后由 suye1010 于 2012-12-26 23:47 编辑
  1. Option Explicit

  2. Sub Summary()
  3. Dim d, arr, TempArr, i As Integer, j As Integer, Hospital
  4. Set d = CreateObject("Scripting.Dictionary")
  5. arr = Range("A1").CurrentRegion ’这里把整个工作表包含数据的区域都赋值给数组
  6. For i = 2 To UBound(arr)
  7.     If d.exists(arr(i, 1)) Then
  8.         TempArr = d(arr(i, 1))'这里1改为你的医院名称所在列对应列数
  9.         TempArr(1) = TempArr(1) + arr(i, 2)
  10. '这里2改为医疗费用所在列对应列数
  11.         TempArr(2) = TempArr(2) + arr(i, 3)
  12. '这里1改为报销数额所在列对应列数
  13.         TempArr(3) = TempArr(3) + 1
  14.         d(arr(i, 1)) = TempArr
  15.     Else
  16.         ReDim TempArr(1 To 3)
  17.         TempArr(1) = arr(i, 2)
  18.         TempArr(2) = arr(i, 3)
  19.         TempArr(3) = 1
  20.         d.Add arr(i, 1), TempArr
  21.     End If
  22.     Erase TempArr
  23. Next i
  24. j = 2
  25. For Each Hospital In d.keys
  26.     Cells(j, "H") = Hospital ' 这里的H改为你打算放统计数据的列标签,以下类似
  27.     Cells(j, "I").Resize(1, 3) = d(Hospital)
  28.     j = j + 1
  29. Next
  30. End Sub
复制代码
回复

使用道具 举报

发表于 2012-12-26 23:19 | 显示全部楼层
suye1010 发表于 2012-12-26 23:12

谢谢啊:){:081:}{:071:}
回复

使用道具 举报

 楼主| 发表于 2012-12-26 23:29 | 显示全部楼层
本帖最后由 sh790512 于 2012-12-26 23:30 编辑

我的表中数据不是和我排的一样,能不能把VBA改动一下?我的三列数据在不同列,最后统计
回复

使用道具 举报

 楼主| 发表于 2012-12-26 23:32 | 显示全部楼层
suye1010 发表于 2012-12-26 23:12

谢谢老师指点,不过我脑子太笨。在数据少的看懂了。如果在我的表中,不知应该怎样改呢

点评

请查看我对程序的部分注释。希望你可以看明白。  发表于 2012-12-26 23:47
回复

使用道具 举报

 楼主| 发表于 2012-12-26 23:47 | 显示全部楼层

还是原来的问题,不会弄啊

我的数据.rar (83.92 KB, 下载次数: 8)
回复

使用道具 举报

发表于 2012-12-26 23:58 | 显示全部楼层
  1. Sub Summary()
  2. Dim d, arr, TempArr, i As Integer, j As Integer, Hospital
  3. Set d = CreateObject("Scripting.Dictionary")
  4. arr = ActiveSheet.UsedRange
  5. For i = 2 To UBound(arr)
  6.     If d.exists(arr(i, 10)) Then
  7.         TempArr = d(arr(i, 10))
  8.         TempArr(1) = TempArr(1) + arr(i, 15)
  9.         TempArr(2) = TempArr(2) + arr(i, 16)
  10.         TempArr(3) = TempArr(3) + 1
  11.         d(arr(i, 10)) = TempArr
  12.     Else
  13.         ReDim TempArr(1 To 3)
  14.         TempArr(1) = arr(i, 15)
  15.         TempArr(2) = arr(i, 16)
  16.         TempArr(3) = 1
  17.         d.Add arr(i, 10), TempArr
  18.     End If
  19.     Erase TempArr
  20. Next i
  21. j = 3
  22. For Each Hospital In d.keys
  23.     Cells(j, "AQ") = Hospital
  24.     Cells(j, "AR").Resize(1, 3) = d(Hospital)
  25.     j = j + 1
  26. Next
  27. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2012-12-27 00:13 | 显示全部楼层
本帖最后由 sh790512 于 2012-12-27 00:15 编辑
suye1010 发表于 2012-12-26 23:58


你好:我试了一下,统计的数据不正确,请给看一下谢谢 不好意思是我弄错了。谢谢你的支持帮助。祝您工作顺利。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 05:35 , Processed in 1.027015 second(s), 18 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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