HERBERS
Excel-Forum
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Entdecke rund 2 Millionen Excel-Lösungen im
Forumsarchiv
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Basiskenntnisse in VBA
RPP63
10.05.2026 10:00:12
Dauer
Moin!
Nö, ich werde nicht ausprobieren, wie lang eine rückwärtige Schleife mit Zellzugriff über 300K Zeilen nebst Löschungen benötigt.
Dürfte zig Minuten dauern …
Hingegen ist Daniels Methode mit Sortieren und Duplikate entfernen pfeilschnell!

Wir basteln uns mal eine Beispieldatei mit 100.000 Zeilen.
• Spalte A Buchstaben A-D
• Spalte B Buchstaben E-H mit den möglichen Endungen .jpg und .html
• Spalte C mit Daniels Formelvorschlag
• Dies ergibt 4*4 html-Unikate und 4*4 jpg-Unikate (also 32) auf 100.000 Zeilen.
Sub Fill_It()

Cells.Delete
Cells(1).Resize(, 3) = Array("Sp1", "Sp2", "Sp3")
Cells(2, 1).Formula2 = "=CHAR(RANDARRAY(100000,,65,68,1))"
Cells(2, 2).Formula2 = _
"=CHAR(RANDARRAY(100000,,69,72,1))&INDEX({"".html"","".jpg""},RANDARRAY(100000,,1,2,1))"
Cells(2, 3).Resize(100000).Formula = "=IF(RIGHT(B2,3)=""jpg"",ROW(),1/ROW())"
With Cells(1).CurrentRegion
.Copy
.PasteSpecial xlPasteValues
.HorizontalAlignment = xlCenter
.NumberFormat = "[<1]0.000;General"
.Columns.AutoFit
End With
Application.Goto Cells(1)
End Sub


Folgendes Makro behält die letzten jpg- und die ersten html-Unikate,
Dauer: < 0,4 Sekunden!
Sub letzte_Eindeutige_jpg_erste_eindeutige_html()

Dim Start#
Start = Timer
With Range("A1").CurrentRegion
.Sort .Cells(3), xlDescending, Header:=xlYes
.RemoveDuplicates Array(1, 2)
End With
With Range("A1").CurrentRegion
.Sort Range("B2"), , Range("A2"), Header:=xlYes
End With
Debug.Print Timer - Start
End Sub


Gruß Ralf
Als Antwort auf diesen Beitrag
Piet
09.05.2026 10:16:30
AW: Duplikate entfernen letzten Eintrag behalten
Hallo

mit VBA sollte es so gehen, ohne zu sortieren!
Wie lange der Code bei 370tsd läuft kann ich nicht sagen?
Es sei denn du benutzt 2 Zellen um die Zeiten zu notieren, z.B. F1,F2

mfg Piet

Sub Doppelte_löschen()

Dim lz As Long, j As Long, i As Long
[f1,f2] = Time 'Nur zur Zeitmessung!
lz = Cells(Rows.Count, 1).End(xlUp).Row
For j = lz To 2 Step -1
If LCase(Cells(j, 3)) = LCase(Cells(j - 1, 3)) Then
'1. html stehen lassen
If LCase(Cells(j, 3)) = "html" Then
Rows(j).Delete shift:=xlUp
ElseIf LCase(Cells(j, 3)) = "jpg" Then
'letzte jpg stehen lassen
For i = j - 1 To 2
Rows(i).Delete shift:=xlUp
If LCase(Cells(i - 1, 3)) <> "jpg" Then Exit For
Next i
End If
End If
Next j
[f2] = Time 'Nur zur Zeitmessung!
End Sub
Folgenachrichten
Antwort auf Beitrag erstellen
Bitte einen Anwendernamen ohne @ eingeben.
Bitte das Passwort eingeben.
Bitte eine gültige E-Mail-Adresse eingeben.
Bitte einen Betreff eingeben.
Weitere Optionen
Aktivieren, wenn die Frage/der Beitrag noch nicht beantwortet wurde und unter Listen > Offene Threads erscheinen soll.
Beispieldatei hochladen

Bitte einen Nachrichtentext eingeben.