Эффективное удаление дубликатов записей на нескольких листах Excel
У меня есть рабочая тетрадь с 2 листами. Лист 1 имеет 3 столбца (1А, 1В и 1С), а лист 2 имеет 2 столбца (2А и 2В). Теперь мне нужно удалить строки из листа 1, если 1A и 1B соответствуют любой строке в листе 2 (т.е. 1A = 2A и 1B = 2B). Поэтому на данный момент в основном забудьте о 1С и удалите все строки на листе 1, которые соответствуют строкам на листе 2.
Одним из способов было бы написать макрос, который берет каждую строку листа 1 и сравнивает 1A со всеми значениями 2A. Если совпадение найдено, сравните соответствующий 1B с 2B и, если они совпадают, удалите строку из листа 1. Учитывая, что в каждой таблице более 100000 строк, я думаю, что это сделает число сравнений слишком большим и займет очень много времени.
Есть ли более эффективный способ сделать это?
1 ответ
Это VBa, отмены нет, поэтому прежде чем сделать это, сначала сделайте резервную копию вашего файла!
Option Explicit
Sub WalkThePlank()
Application.ScreenUpdating = False
Dim startRow As Integer
startRow = 1
Dim row As Integer
row = startRow
Dim bRow As Integer
'sharks below cap'ain
Do While (Worksheets("Sheet1").Range("A" & row).Value <> "")
Dim aVal As String
Dim bVal As String
aVal = Worksheets("Sheet1").Range("A" & row).Value
bVal = Worksheets("Sheet1").Range("B" & row).Value
'I see thy booty
bRow = startRow
Do While (Worksheets("Sheet2").Range("A" & bRow).Value <> "")
Dim aVal2 As String
Dim bVal2 As String
aVal2 = Worksheets("Sheet2").Range("A" & bRow).Value
bVal2 = Worksheets("Sheet2").Range("B" & bRow).Value
If (aVal = aVal2 And bVal = bVal2) Then
Worksheets("Sheet1").Rows(row).Delete ' we found a traitor, feed em to the sharks
row = row - row
Exit Do
End If
bRow = bRow + 1
Loop
row = row + 1
Loop
End Sub
Скриншоты:
Лист1
Sheet2
И после запуска макроса Sheet1 выглядит так (Sheet2 остается неизменным)