AW: Gerne
09.12.2022 19:08:53
Daniel
ja, kann man machen.
bei großen Datenmengen ist aber ZählenWenn zu langsam, weil jeder Wert mit jedem anderen Wert verglichen werden muss, dh Aufwand = Anzahl * Anzahl
hier muss man mindestens einmal sortieren, nämlich nach der Spalte mit den Duplikaten, so dass gleichen Werte direkt untereinander stehen
dann reicht für die Duplikatsprüfung die Abfrage, ob der Wert gleich dem Wert obendrüber oder gleich dem Wert unten drunter ist, dh man muss ihn nicht mehr mit allen anderen Werten der Liste vergleichen sondern nur mit seinen beiden Nachbarn, dh Aufwand = Anzahl*2
außerdem hat man das ganze dann schon mal so vorsortiert, so dass sich die Anzahl der zu löschenden Einzelzeilen reduziert und man mehr zusammenhängende Blöcke hat.
wenns ganz ohne Umsortierung sein soll (was für mache wichtig ist), dann könnte man, so wie ich beschrieben habe, Dictionarys einsetzen um die Duplikate zu identifizieren und dann das Duplikate entfernen, um die Duplikate zu löschen.
hier mal ein Codebeispiel dafür:
Sub Doppelte_Ganz_Löschen()
Dim arr
Dim dic As Object
Dim z As Long
Set dic = CreateObject("Scripting.dictionary")
arr = ActiveSheet.UsedRange.Columns(4)
'--- Duplikate finden
For z = 1 To UBound(arr, 1)
dic(arr(z, 1)) = dic(arr(z, 1)) + 1
Next
'--- Duplikate zum löschen markieren
For z = 1 To UBound(arr, 1)
arr(z, 1) = IIf(arr(z, 1) = 1, z, 0)
Next
'--- Duplikate in Tabelle löschen
arr(1, 1) = 0
With ActiveSheet.UsedRange
With .Columns(.Columns.Count + 1)
.Value = arr
.EntireRow.RemoveDuplicates .Column, xlNo
.ClearContents
End With
End With
End Sub
um Zeilen mit Duplikate Entfernen zu löschen, ist es erforderlich, dass die erste Zeile eine Überschriftenzeile ist und keine Datenzeile, da die erste Zeile prinzipbedingt nicht gelöscht werden kann.
Gruß Daniel