我有一個包含大量數據的工作表(表單1)。這些數據有幾列,其中之一叫做nameColumn。 nameColumn每行包含一個單詞。使用VBA刪除基於另一個表中列出的單詞的行 - 性能較差
在表2中,我有一個600字的列表。
我需要刪除工作表Sheet1從每一行包含在名稱列一個字,在Sheet2中
我按字母順序排序的名稱列工作表Sheet1匹配的詞,也整理Sheet2中按字母順序。
我寫的代碼很有作用,但它很糟糕。它爲表1中的行數創建一個for循環,並在其中嵌套一個while循環,用於比較兩個工作表之間的值,如果在nameColumn中找到匹配項,則刪除該行。我試圖通過告訴while循環來「優化」它,如果sheet1中的單詞按字母順序「比sheet2中的單詞更大」,則只增加「i」。
這段代碼需要20分鐘才能做〜10k行。我怎樣才能讓它更快?
請注意,我已經嘗試更改代碼以將不匹配的行復制到另一個工作表,這似乎只是一個慢。 我也看過這篇文章,坦率地說,我不太瞭解它來嘗試實現它。
Sub removerows3()
Application.ScreenUpdating = False
Dim numberof_data_rows As Long
numberof_data_rows = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
Dim numberof_alert_rows As Long
numberof_alert_rows = Sheet2.Cells(Rows.Count, 1).End(xlUp).Row
Dim nameColumn As Integer
nameColumn = 3
Dim current_alert_row As Integer
current_alert_row = 2
Dim current_data_row As Long
current_data_row = 2
Dim keep_searching_dosealert As Integer
keep_searching_dosealert = 1
For current_data_row = 2 To numberof_data_rows
Do While keep_searching_dosealert = 1
If Sheet2.Cells(current_alert_row, 1) = Cells(current_data_row, nameColumn)
Cells(current_data_row, nameColumn).EntireRow.Delete
keep_searching_dosealert = 0
current_data_row = current_data_row - 1
numberof_data_rows = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
ElseIf StrComp(Sheet2.Cells(current_alert_row, 1), Sheet1.Cells(current_data_row, nameColumn)) = 1 Then
keep_searching_dosealert = 0
current_alert_row = current_alert_row - 1
ElseIf StrComp(Sheet2.Cells(current_alert_row, 1), Sheet1.Cells(current_data_row, nameColumn)) = -1 Then
keep_searching_dosealert = 1
current_alert_row = current_alert_row + 1
Else
MsgBox ("error")
End If
Loop
keep_searching_dosealert = 1
Next current_data_row
End Sub
我懷疑做名稱列的匹配對Sheet2的詞語列(使用match或者vlookup),然後在sheet1上設置一個自動過濾器,使用查找結果過濾掉你不想要的行,然後將過濾後的集合複製到一個新的表格中會快得多。 – chuff