Я бы использовал объект словаря, чтобы собрать ячейки, которые нужно очистить:
Option Explicit
'Set Reference to Microsoft Scripting Runtime
Sub deDup()
Dim wsSrc As Worksheet, rSrc As Range, C As Range
Dim Dict As Dictionary, colRng As Collection
Dim rDel As Range
Dim v As Variant, w As Variant
Dim sKey As String
'Set worksheet/range for the column to filter on
Set wsSrc = Worksheets("sheet2")
With wsSrc
Set rSrc = .Range(.Cells(2, 5), .Cells(.Rows.Count, 5).End(xlUp))
End With
Set Dict = New Dictionary
Dict.CompareMode = TextCompare
For Each C In rSrc
sKey = C.Value2
If Not Dict.Exists(sKey) Then
Set colRng = New Collection
colRng.Add C
Dict.Add Key:=sKey, Item:=colRng
Else
Dict(sKey).Add C
End If
Next C
For Each v In Dict.Keys
If Dict(v).Count > 1 Then
For Each w In Dict(v)
If rDel Is Nothing Then
Set rDel = w
Else
Set rDel = Union(rDel, w)
End If
Next w
End If
Next v
rDel.Clear
End Sub
Если это происходит слишком медленно, потому что ваши данные очень большие, вы можете
- выключите
ScreenUpdating
, Events
и установите Calculation
на manual
- или считайте данные в массив VBA и переберите данные таким образом.