|
本帖最后由 lku898786 于 2015-8-30 10:44 编辑
我从数据库里提取了一个200多万行、10列的二维数组,我的思路是先求出每行有几种不同值,由于10列是固定的,那么每行最低有一种,最高有10种,下面是我写的代码(提取数组的代码省略了,下面的代码是假设数组arr已经提取到了):- sub NumberStatistics()
- dim i&,j&
- dim arr,t,d
- Application.ScreenUpdating=False
- Redim t(1 to 10,1 to 2) '数组t用来存储每类各有多少行
- for i=Lbound(t) to Ubound(t)
- t(i,1)=i
- next
- set d=CreateObject("Scripting.Dictionary")
- for i=Lbound(arr) to Ubound(arr)
- for j=Lbound(arr,2) to Ubound(arr,2)
- d(arr(i,j))=""
- next
- t(d.count,2)=t(d.count,2)+1
- d.Removeall
- next
- [a1].Resize(Ubound(t),Ubound(t,2))=t
- Set d=Nothing
- Application.ScreenUpdating=True
- End Sub
复制代码 请教各路大神,这段代码能否优化,能否不使用字典达到效果,200多万行数据用字典运行速度比较令人难以忍受,因为我整个数据处理还有其他很多工作要做。拜求各位支招,多谢多谢!
不用字典时我喜欢这样写:
stmp$="|"
scount%=0
for j=Lbound(arr,2) to Ubound(arr,2)
if instr(stmp,"|" & arr(i,j) & "|")<1 then stmp=stmp & arr(i,j) & "|":scount=scount+1
next
这样,scount就是你的d.count
这样十来个值我也不喜欢用字典,不过没比较过哪个快。正好你可以测试一下。
你原代码不用removeall,而是把key改造一下,再测试一下哪个快呢
|
|