我也不是很清楚,也许你读数据、写数据会涉及到屏幕更新吧,反正一般涉及工作表的程序我都会加上这两句,有百利而无一害!
你的第4、5种方法很好,数组真的提速不少,就跟教科书似的,我已收藏!谢谢
支持下一贴!
【经过测试,第5种方法特好使,对于两列数据的重复问题,数据29211行,去掉重复值之后是2219行,用第5种方法才运行1.39秒左右,如果采用高级筛选,跟死机似的,采用countif肯定不行,用vlookup方法,速度也超慢,能搞定也得十分钟,代码如下】
不知我这有没有喧宾夺主的意思,希望UNARTHUR兄原谅!再次感谢UNARTHUR兄!
Sub aaa()
Dim i&, p&, c&, arr, arr1()
Dim s As String
Dim h As New Collection
Dim t
t = Timer
Application.ScreenUpdating = False
[e:f].ClearContents
p = [a65536].End(xlUp).Row
arr = Range("a1:b" & p)
On Error Resume Next
For i = 1 To p
s = arr(i, 1) & "---" & arr(i, 2) '加一个在ab列种都没有的字段"---"
h.Add s, CStr(s)
Next i
Err.Clear
On Error GoTo 0 '清除错误处理,以后出现错误时还是有显示
c = h.Count
ReDim arr1(1 To c, 0 To 1)
For i = 1 To c
arr1(i, 0) = Split(h(i), "---")(0)
arr1(i, 1) = Split(h(i), "---")(1)
Next i
Range("e1:f" & c) = arr1
t1 = Timer - t
MsgBox "用时:" & t1 & "秒"
Application.ScreenUpdating = True
End Sub
[此贴子已经被作者于2005-6-21 10:15:15编辑过] |