EXCEL中VB代码,执行速度太慢

下面这段代码是用EXCEL中的VB写的,执行后起码要5分钟才能执行完,不知道为什么,请高手帮忙修改一下,提高执行速度。

Private Sub CommandButton3_Click()

Dim a As Integer
Dim i As Integer
For a = 1 To 150
For i = 1 To 150
If Sheet1.Cells(a, 1) = Sheet1.Cells(i + a, 1) Then
Rows(i + a & ":" & i + a).Delete Shift:=xlUp
End If
Next i
Next a
End Sub

你的意思好像是要找到相同行然后删除掉?

导致运行慢的主要原因是:假如你的第2行和第1行相同,那么系统删除了第2行,这时第150行是空的;如果上面再删除一行,那么149行是空的;最后,程序会执行到第149和150行,比较一下,发现它们是“相同”的,所以又删除了一次。可以想象,如果你上面删除的行越多,下面的空行就越多,“相同”的也就越多,所以程序要在很多空行那里频繁的执行删除工作,这是很慢的,所以程序运行很久。

我处理这类问题的时候,一般都是先排序,然后从最后一行开始往上比较,相同一行删除一行,这就避免空行的问题了。还有,可以关闭界面刷新,也能提高运行速度。
排序一下,然后用代码
For i = 150 to 2 step -1
If Sheet1.Cells(i, 1) = Sheet1.Cells(i - 1, 1) Then
Rows(i).Delete Shift:=xlUp
End If
Next i

如果原来的数据有排序的必要,可以在排序前先加一列编号,排序删除后,再依据原来的编号重排回去。

上面提到的界面刷新好像是ScreenUpdate,由于电脑没装Excel,无法确定。
如果要关闭刷新,就一句
application.screenUpdate=false
然后记得用
application.screenUpdate=true
回原。这个可以避免执行程序时界面闪烁的问题,也能稍微提高运行速度。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-10-13
这样肯定就会慢的,支持DreamMuse
第2个回答  2009-10-13
没办法了,VC执行优先级高,用VC宏执行就快些,代码差别有些而以。
相似回答