Excel精英培训网

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

[已解决]如何对数据做分层统计

[复制链接]
发表于 2014-10-29 09:49 | 显示全部楼层 |阅读模式
本帖最后由 fightpanda 于 2014-10-29 10:09 编辑

目前数据有些不同:结果变量不都在一列中,会分布在几列,而且顺序不一致,可见下面的草表演示

A1编码   A2类型    B1第一种疾病    C1第二种疾病    D1第三种疾病   ···
1                1                   X                            Y                      Z
2               2                   X
3                3                  Y                              Z
4                2                  Z                              X
5                1                  Z                              Y                                                         

X、Y、Z表示具体的疾病名称,B1、C1、D1只是存放某个人第一、二、三种疾病

请教该如何用数据透视表之类分别做出具体疾病X、Y、Z的分层分析(根据类型A2分)

类型     疾病X    疾病Y    疾病Z
1         具体数量
2
3

谢谢
最佳答案
2014-10-29 10:47
  1. Sub Macro1()
  2. Dim arr, brr, d, d2, d3, i&, j%, zf$$
  3. Set d = CreateObject("scripting.dictionary")
  4. Set d2 = CreateObject("scripting.dictionary")
  5. Set d3 = CreateObject("scripting.dictionary")
  6. arr = Range("a1").CurrentRegion
  7. For i = 2 To UBound(arr)
  8.     For j = 2 To UBound(arr, 2)
  9.         If j = 2 Then
  10.             d(arr(i, j)) = ""
  11.         Else
  12.             If arr(i, j) <> "" Then d2(arr(i, j)) = ""
  13.         End If
  14.         If j > 2 Then
  15.             zf = arr(i, 2) & "," & arr(i, j)
  16.             d3(zf) = d3(zf) + 1
  17.         End If
  18.     Next
  19. Next
  20. ReDim brr(1 To d.Count + 1, 1 To d2.Count + 1)
  21. a = d.keys: b = d2.keys
  22. For i = 0 To d.Count - 1
  23.     brr(i + 2, 1) = a(i)
  24.     For j = 0 To d2.Count - 1
  25.         brr(1, j + 2) = b(j)
  26.         brr(i + 2, j + 2) = d3(a(i) & "," & b(j))
  27.     Next
  28. Next
  29. Range("j1").Resize(UBound(brr), UBound(brr, 2)) = brr
  30. End Sub
复制代码

分层分析.rar

6.81 KB, 下载次数: 16

发表于 2014-10-29 09:57 | 显示全部楼层
上个附件,都不知道这些数据在哪行哪列怎么写公式呢?
回复

使用道具 举报

 楼主| 发表于 2014-10-29 10:09 | 显示全部楼层
zyouong 发表于 2014-10-29 09:57
上个附件,都不知道这些数据在哪行哪列怎么写公式呢?

已传,谢谢


回复

使用道具 举报

发表于 2014-10-29 10:47 | 显示全部楼层    本楼为最佳答案   
  1. Sub Macro1()
  2. Dim arr, brr, d, d2, d3, i&, j%, zf$$
  3. Set d = CreateObject("scripting.dictionary")
  4. Set d2 = CreateObject("scripting.dictionary")
  5. Set d3 = CreateObject("scripting.dictionary")
  6. arr = Range("a1").CurrentRegion
  7. For i = 2 To UBound(arr)
  8.     For j = 2 To UBound(arr, 2)
  9.         If j = 2 Then
  10.             d(arr(i, j)) = ""
  11.         Else
  12.             If arr(i, j) <> "" Then d2(arr(i, j)) = ""
  13.         End If
  14.         If j > 2 Then
  15.             zf = arr(i, 2) & "," & arr(i, j)
  16.             d3(zf) = d3(zf) + 1
  17.         End If
  18.     Next
  19. Next
  20. ReDim brr(1 To d.Count + 1, 1 To d2.Count + 1)
  21. a = d.keys: b = d2.keys
  22. For i = 0 To d.Count - 1
  23.     brr(i + 2, 1) = a(i)
  24.     For j = 0 To d2.Count - 1
  25.         brr(1, j + 2) = b(j)
  26.         brr(i + 2, j + 2) = d3(a(i) & "," & b(j))
  27.     Next
  28. Next
  29. Range("j1").Resize(UBound(brr), UBound(brr, 2)) = brr
  30. End Sub
复制代码
回复

使用道具 举报

发表于 2014-10-29 10:48 | 显示全部楼层
………………

副本Xl0000001.rar

9.17 KB, 下载次数: 10

回复

使用道具 举报

发表于 2014-10-29 10:52 | 显示全部楼层
分层分析.rar (10.39 KB, 下载次数: 9)
回复

使用道具 举报

 楼主| 发表于 2014-10-29 11:24 | 显示全部楼层
dsmch 发表于 2014-10-29 10:48
………………

感谢!

但是不知道怎么套用到正式要处理的数据中

代码哪几个地方需要修改?不知道方不方便解释

点评

模拟实际数据,用附件说明问题  发表于 2014-10-29 11:34
回复

使用道具 举报

 楼主| 发表于 2014-10-29 11:24 | 显示全部楼层
zyouong 发表于 2014-10-29 10:52

四楼是正解
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 15:17 , Processed in 0.422472 second(s), 19 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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