|
本帖最后由 zhhait 于 2017-9-25 12:24 编辑
问题描述:
1、有近8万注号码,现在要分别统计每个号码在这8万注号里的重复个数。如:67134一共重复了4次,则就在每个号码的后面标注次数 4 。号码26669共重复了3次,则在每个号码后标 3 。再如61550在这8万注里只出现了一次,则在这个号码后而标注 1 。
2、如果用统计函数那会极其的慢,我也曾用 for + 数组 ,也是极其的慢。有没有什么好的方法呢? 可惜我不会用字典,所以请各位大师相助。烦请写出代码并注释。
3、还有一种思路:就是先将号码 写入到 access表中,再用 sql查询,不知道效果怎么样,因为我也不会这个。如果有大师会这个,也烦请写出代码,我学习一下。
4、如果现在又输入了一个新号,那么所有号码重复个数又要重新统计一次。
谢谢!
- Sub tt()
- Dim i As Long, arr, d As Object, brr
- t = Timer
- Set d = CreateObject("scripting.dictionary")
- arr = Range("b2:c" & Cells(Rows.Count, 2).End(3))
- ReDim brr(1 To UBound(arr), 1 To 1)
- For i = 1 To UBound(arr)
- d("'" & arr(i, 2)) = d("'" & arr(i, 2)) + 1
- Next
- For i = 1 To UBound(arr)
- brr(i, 1) = d("'" & arr(i, 2))
- Next
- [d2].Resize(UBound(brr)) = brr
- [e2].Resize(d.Count) = Application.Transpose(d.Keys) '去重复统计号码
- [f2].Resize(d.Count) = Application.Transpose(d.items) '去重复统计数量
- MsgBox Timer - t
- End Sub
复制代码
用一个字典速度还是可以接受的
|
|