我有一個包含三列的列表。第一列包含名稱,其他兩列包含數字。該宏取第一個名稱(A1),然後向下搜索列A以查找另一個事件。加快搜索和刪除宏
當它找到它時,會刪除整行。然後轉到A2並執行相同的操作。它適用於大約500個條目,但使用3000個條目會顯着降低速度。有沒有辦法加快這個代碼?
Sub Button1_DeleteRow()
Dim i As Integer
Dim j As Integer
Dim Value As Variant
Dim toCompare As Variant
For i = 1 To 3000
Value = Cells(i, 1)
For j = (i + 1) To 3000
toCompare = Cells(j, 1)
If (StrComp(Value, toCompare, vbTextCompare) = 0) Then
Rows(j).EntireRow.Delete
End If
Next j
Next i
End Sub
+1很好的呈現! – 2012-01-04 07:46:26
謝謝,很好的答案。你可以建議,但爲什麼宏需要這麼長時間?我如何加快速度? – Ali 2012-01-04 13:50:37
@Ali你是指你目前的代碼?如果是這樣,它運行= 3000 *(3000/2)-1500 = 4498500循環。範圍內環路固有的慢一)加快步伐,你chould在代碼年底關閉ScreenUpdating和計算的代碼開始(並重新打開)b)如果您刪除行,你必須刪除下向上頂不下來,以避免跳過行(即,如果你有兩個連續的代碼會丟失你的代碼)。 – brettdj 2012-01-05 00:22:04