Excel精英培训网

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

[已解决]怎样统计姓名重复次数?谢谢

[复制链接]
发表于 2012-7-21 13:47 | 显示全部楼层 |阅读模式
本帖最后由 小雨饰品 于 2012-7-21 15:50 编辑

怎样用VBA统计姓名重复次数?
不好意思:现补充我没有讲清楚的一个注意点:我要统计连续出现的次数,当间隔出现时,就重新统计出现次数。请您再帮助看看看!
从新上传一个附件
最佳答案
2012-7-21 16:22
小雨饰品 发表于 2012-7-21 15:26
谢谢您的出手,不好意思,我没有将其中一个小问题讲清楚:我要统计连续出现的次数,当间隔出现时,就重 ...
  1. Sub test()
  2.     Dim i As Long, j As Long
  3.     Dim arr, brr()
  4.     arr = Range("c4:c" & Range("c65536").End(xlUp).Row)
  5.     ReDim brr(1 To UBound(arr), 1 To 1)
  6.     j = 1
  7.     For i = UBound(arr) To 1 Step -1
  8.         If i = 1 Then brr(i, 1) = j: Exit For
  9.         If arr(i, 1) = arr(i - 1, 1) Then
  10.             j = j + 1
  11.         Else
  12.             brr(i, 1) = j
  13.             j = 1
  14.         End If
  15.     Next
  16.     Range("d4:d65536").ClearContents
  17.     Range("d4").Resize(UBound(brr), 1) = brr
  18. End Sub
复制代码

表.zip

115.68 KB, 下载次数: 87

发表于 2012-7-21 14:46 | 显示全部楼层
  1. Sub test()
  2.     Dim i As Long, j As Long
  3.     Dim arr, brr()
  4.     Dim d As Object
  5.     Set d = CreateObject("scripting.dictionary")
  6.     arr = Range("c4:c" & Range("c65536").End(xlUp).Row)
  7.     ReDim brr(1 To UBound(arr), 1 To 1)
  8.     For i = 1 To UBound(arr)
  9.         If d.exists(arr(i, 1)) Then
  10.             j = d(arr(i, 1))
  11.             brr(j, 1) = brr(j, 1) + 1
  12.         Else
  13.             d(arr(i, 1)) = i
  14.             brr(i, 1) = 1
  15.         End If
  16.     Next
  17.     Range("d4:d65536").ClearContents
  18.     Range("d4").Resize(UBound(brr), 1) = brr
  19. End Sub
复制代码
回复

使用道具 举报

发表于 2012-7-21 14:51 | 显示全部楼层
表.rar (31.3 KB, 下载次数: 33)
回复

使用道具 举报

 楼主| 发表于 2012-7-21 15:26 | 显示全部楼层
本帖最后由 小雨饰品 于 2012-7-21 15:51 编辑
hrpotter 发表于 2012-7-21 14:46


谢谢您的出手,不好意思,我没有将其中一个小问题讲清楚:我要统计连续出现的次数,当间隔出现时,就重新统计出现次数。请您再帮助看看看!

表.zip

115.68 KB, 下载次数: 31

回复

使用道具 举报

 楼主| 发表于 2012-7-21 15:40 | 显示全部楼层
本帖最后由 小雨饰品 于 2012-7-21 15:51 编辑
hhl1984 发表于 2012-7-21 14:51
水平有限,只能这样,不知道能不能帮的上忙


谢谢您的出手,不好意思,我没有将其中一个小问题讲清楚:我要统计连续出现的次数,当间隔出现时,就重新统计出现次数。请您再帮助看看看!

表.zip

115.68 KB, 下载次数: 46

回复

使用道具 举报

发表于 2012-7-21 16:22 | 显示全部楼层    本楼为最佳答案   
小雨饰品 发表于 2012-7-21 15:26
谢谢您的出手,不好意思,我没有将其中一个小问题讲清楚:我要统计连续出现的次数,当间隔出现时,就重 ...
  1. Sub test()
  2.     Dim i As Long, j As Long
  3.     Dim arr, brr()
  4.     arr = Range("c4:c" & Range("c65536").End(xlUp).Row)
  5.     ReDim brr(1 To UBound(arr), 1 To 1)
  6.     j = 1
  7.     For i = UBound(arr) To 1 Step -1
  8.         If i = 1 Then brr(i, 1) = j: Exit For
  9.         If arr(i, 1) = arr(i - 1, 1) Then
  10.             j = j + 1
  11.         Else
  12.             brr(i, 1) = j
  13.             j = 1
  14.         End If
  15.     Next
  16.     Range("d4:d65536").ClearContents
  17.     Range("d4").Resize(UBound(brr), 1) = brr
  18. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2012-7-21 16:28 | 显示全部楼层
hrpotter 发表于 2012-7-21 16:22

完全达到我预期效果,且运行速度很快。
非常感谢您的帮助。这下我可节省了不少时间。
回复

使用道具 举报

发表于 2012-7-22 08:51 | 显示全部楼层
厉害,不过我现在还是看不懂数组。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-25 05:53 , Processed in 0.310300 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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