|
楼主 |
发表于 2023-3-29 22:33
|
显示全部楼层
我调试了一下代码,并稍加修改,通用一些,速度很快,几乎瞬间完成(200多毫秒),一万多行四列数据比我编快了3倍,我的代码耗时在排序上不少。
- Option Explicit
- Sub Main()
- Dim d As Object
- Dim arr, i As Long, j As Long
- Dim t
- arr = ActiveSheet.Range("a1").CurrentRegion
- Set d = CreateObject("scripting.dictionary")
- For i = 1 To UBound(arr)
- d(arr(i, 1)) = 1
- Next i
- ' Stop
- For j = 2 To UBound(arr, 2)
- For i = 1 To UBound(arr)
- If d.exists(arr(i, j)) Then
- d(arr(i, j)) = d(arr(i, j)) + 1
- End If
- Next i
- Next j
- For i = 1 To UBound(arr)
- If d(arr(i, 1)) < UBound(arr, 2) Then
- d.Remove (arr(i, 1))
- End If
- Next i
- ' Stop
- Range("f2").Resize(d.Count, 1) = Application.Transpose(d.keys)
- Erase arr
- Set d = Nothing
- End Sub
- '时间复杂度:O(n+n*列数+n)
复制代码
但不知为什么遇到这么大的数字(上万条以上),程序出错了,是不是长数字作字典键名有问题?
|
|