我有一张包含大量数据的工作表(sheet1)。此数据有几列,其中一列称为 nameColumn。nameColumn 每行包含一个单词。
在表 2 中,我有一个 600 个单词的列表。
我需要从 sheet1 中删除包含 nameColumn 中与 sheet2 中的单词匹配的单词的每一行
我已经按 nameColumn 的字母顺序对 sheet1 进行了排序,并且还按字母顺序对 sheet2 进行了排序。
我编写的代码有效,但非常糟糕。它为工作表 1 中的行数创建一个 for 循环,以及一个嵌套在其中的 while 循环,用于比较两个工作表之间的值,如果在 nameColumn 中找到匹配项,则删除该行。我尝试通过告诉 while 循环仅在 sheet1 中所讨论的单词按字母顺序“大于”sheet2 中的单词时才增加“i”来“优化”它。
这段代码需要 20 分钟才能完成大约 10k 行。我怎样才能让它更快?
请注意,我尝试更改代码以将不匹配的行复制到另一张工作表,这似乎很慢。我也看过这篇文章Excel / VBA Remove duplicate rows by cross reference 2 different sheet 然后删除 1 row,坦率地说,我对它的理解还不够,无法尝试实现它。
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