Удаление дубликатов, сохранение последней записи - оптимизация
Я работаю над макросом, который пройдет через электронную таблицу и удалит дублирующиеся записи (строки) на основе двух критериев, которые представлены отдельно в двух столбцах (столбцы Q и D).
Вот что у меня есть. Я проверил это на небольшом наборе данных, и этомедленный.
Sub RemoveDupesKeepLast()
dim i As Integer
dim criteria1, criteria2 As String
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
'start at bottom of sheet, go up
For i = ActiveSheet.UsedRange.Rows.Count to 2 Step -1
'if there is no entry, go to next row
If Cells(i, "Q").Value = "" Then
GoTo gogo:
End If
'set criteria that we will filter for
criteria1 = Cells(i, "D").Value
criteria2 = Cells(i, "Q").Value
'filter for criteria2, then criteria1 to get duplicates
ActiveSheet.Range("A":"CI").AutoFilter field:=17, Criteria1:=criteria2, Operator:=xlFilterValues
ActiveSheet.Range("A":"CI").AutoFilter field:=4, Criteria1:=criteria1, Operator:=xlFilterValues
'if there are duplicates, keep deleting rows until only bottom-most entry is left behind
Do While Range("Q2", Cells(Rows.Count, "Q").End(xlUp)).Cells.SpecialCells(xlCellTypeVisible).Count > 1
ActiveSheet.AutoFilter.Range.Offset(1).SpecialCells(xlCellTypeVisible).Cells(1,17).EntireRow.Delete
Loop
'reset autofilter
If ActiveSheet.FilterMode Then
Cells.AutoFilter
End If
gogo:
Next i
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Есть ли другой способ, которым я могу подойти к этой проблеме, чтобы ускорить процесс? Как сейчас, я в основном проверяю каждую строку, пока не доберусь до вершины. Листы на самом деле где-то от 30000 строк до макс. Мне кажется, что должен быть более быстрый и чистый способ достижения того, что я пытаюсь сделать, но я не могу думать об этом.