Excel精英培训网

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

[已解决]如何统计一区域内各数字出现的次数

[复制链接]
发表于 2016-7-3 10:08 | 显示全部楼层 |阅读模式
如何统计一区域内各数字出现的次数
最佳答案
2016-7-3 15:56
  1. Sub Macro1()
  2. Dim w(1 To 12), ww(1 To 12)
  3. Set d = CreateObject("scripting.dictionary")
  4. For Each c In [b2:h2]
  5.     x = Split(c, ",")
  6.     For i = 0 To UBound(x) - 1
  7.         s = Val(x(i))
  8.         w(s) = w(s) + 1
  9.         ww(s) = ww(s) + 1
  10.     Next
  11. Next
  12. For i = 1 To UBound(w) - 1
  13.     For j = i + 1 To UBound(w)
  14.         If w(i) > w(j) Then p = w(i): w(i) = w(j): w(j) = p
  15.     Next
  16. Next
  17. For i = 1 To UBound(w)
  18.     d(w(i)) = ""
  19. Next
  20. For Each a In d.keys
  21.     p = ""
  22.     For i = 1 To UBound(w)
  23.         If ww(i) = a Then p = p & "," & Format(i, "00")
  24.     Next
  25.     p2 = p2 & "共" & a & "次:" & Mid(p, 2) & ",(" & Chr(10)
  26. Next
  27. [c3] = p2
  28. End Sub
复制代码

新建 Microsoft Excel 工作表.rar

6.86 KB, 下载次数: 14

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2016-7-3 15:56 | 显示全部楼层    本楼为最佳答案   
  1. Sub Macro1()
  2. Dim w(1 To 12), ww(1 To 12)
  3. Set d = CreateObject("scripting.dictionary")
  4. For Each c In [b2:h2]
  5.     x = Split(c, ",")
  6.     For i = 0 To UBound(x) - 1
  7.         s = Val(x(i))
  8.         w(s) = w(s) + 1
  9.         ww(s) = ww(s) + 1
  10.     Next
  11. Next
  12. For i = 1 To UBound(w) - 1
  13.     For j = i + 1 To UBound(w)
  14.         If w(i) > w(j) Then p = w(i): w(i) = w(j): w(j) = p
  15.     Next
  16. Next
  17. For i = 1 To UBound(w)
  18.     d(w(i)) = ""
  19. Next
  20. For Each a In d.keys
  21.     p = ""
  22.     For i = 1 To UBound(w)
  23.         If ww(i) = a Then p = p & "," & Format(i, "00")
  24.     Next
  25.     p2 = p2 & "共" & a & "次:" & Mid(p, 2) & ",(" & Chr(10)
  26. Next
  27. [c3] = p2
  28. End Sub
复制代码

评分

参与人数 1 +1 收起 理由
tfzyes + 1 赞一个

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-7-3 18:09 | 显示全部楼层
dsmch 发表于 2016-7-3 15:56

谢谢,真是太感谢你了,如果以区域内的数字来叛定统计,不限制只统计1-12数字的话会更好,我已知道修改.
回复

使用道具 举报

 楼主| 发表于 2016-7-3 20:09 | 显示全部楼层
dsmch 发表于 2016-7-3 15:56

遇到种情况:若是次数为0时输出格式为共00次:你的代码次数为0时是:共次:03,(,没有00,应如何修改呢?

点评

模拟结果,请用附件说明问题  发表于 2016-7-4 08:31
回复

使用道具 举报

 楼主| 发表于 2016-7-4 08:42 | 显示全部楼层
tfzyes 发表于 2016-7-3 20:09
遇到种情况:若是次数为0时输出格式为共00次:你的代码次数为0时是:共次:03,(,没有00,应如何修改呢? ...

已上传附件

新建 Microsoft Excel 工作表.rar

16.55 KB, 下载次数: 3

回复

使用道具 举报

发表于 2016-7-4 08:59 | 显示全部楼层
  1. Sub Macro1()
  2. Dim w(1 To 12), ww(1 To 12)
  3. Set d = CreateObject("scripting.dictionary")
  4. For i = 1 To 12
  5.     w(i) = 0
  6. Next
  7. For Each c In [b2:h2]
  8.     x = Split(c, ",")
  9.     For i = 0 To UBound(x) - 1
  10.         s = Val(x(i))
  11.         w(s) = w(s) + 1
  12.         ww(s) = ww(s) + 1
  13.     Next
  14. Next
  15. For i = 1 To UBound(w) - 1
  16.     For j = i + 1 To UBound(w)
  17.         If w(i) > w(j) Then p = w(i): w(i) = w(j): w(j) = p
  18.     Next
  19. Next
  20. For i = 1 To UBound(w)
  21.     d(w(i)) = ""
  22. Next
  23. For Each a In d.keys
  24.     p = ""
  25.     For i = 1 To UBound(w)
  26.         If ww(i) = a Then p = p & "," & Format(i, "00")
  27.     Next
  28.     p2 = p2 & "共" & a & "次:" & Mid(p, 2) & ",(" & Chr(10)
  29. Next
  30. [b3] = p2
  31. End Sub
复制代码

评分

参与人数 1 +1 收起 理由
tfzyes + 1 很给力

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-7-4 10:36 | 显示全部楼层
dsmch 发表于 2016-7-4 08:59

真是太感谢您的帮助了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 10:32 , Processed in 1.297836 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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