Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
400to404
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
400to404
400to404
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Doppelte Zeilen löschen

Doppelte Zeilen löschen
Olaf
Liebe Forumer,
mit meinen noch geringen (ich arbeite ständig dran) Kenntnissen in VBA komme ich nicht mehr weiter und leider habe ich im Archiv nichts wirklich passendes gefunden.
Ich habe eine sehr große Tabelle (z.Zt. über 11.000 Zeileneinträge) mit 9 Spalten die ständig wächst. Darunter sind mittlerweile sehr viele Zeilen doppelt (Suchkriterium ist Spalte A), die sich aber nur in Spalte F unterscheiden (Datumsspalte). Ich möchte gerne dass nur die jeweilige Zeile gelöscht wird, die in Spalte F das ÄLTERE Datum trägt. Die Zeile mit dem jüngeren Datum soll stehen bleiben.
Wer kann mir helfen?
Gruß
Olaf

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Doppelte Zeilen löschen
alex
hi olaf,
probier mal folgenden code. ich habe ihn hoffentlich ausreichend kommentiert:
ciao, alex

Sub duplikate()
Dim i As Long, iDuplikat As Long, DuplikatStartPos As Long, DuplikatEndPos As Long
Dim ZelleAktuelleZeile As String, ZelleNächsteZeile As String
Dim Duplikat As Boolean
i = 1
iDuplikat = 0
' bildschirmanzeige (aktualisierung) ausschalten (geht ddadurch sehr viel schneller)
'Application.ScreenUpdating = False
'Application.StatusBar = "bitte warten .."
' solange zelle in spalte a (1) nicht leer
While Cells(i, 1).Value <> ""
' zelle und nächste zelle einlesen
ZelleAktuelleZeile = Cells(i, 1).Value
ZelleNächsteZeile = Cells(i + 1, 1).Value
' wenn aktuelle und nächste zelle gleich, dann duplikat = wahr und zähler inkrementieren
If ZelleAktuelleZeile = ZelleNächsteZeile Then
Duplikat = True
iDuplikat = iDuplikat + 1
Else
Duplikat = False
End If
' wenn duplikat = falsch
If Duplikat = False Then
' und iduplikat >0 ist, also ein bereich mit duplikaten gefunden wurde
If iDuplikat > 0 Then
' start und endzeile der duplikate ermitteln
DuplikatStartPos = i - iDuplikat
DuplikatEndPos = i
' bereich der duplikate markieren
Range(Cells(DuplikatStartPos, 1), Cells(DuplikatEndPos, 6)).Select
' bereich der duplikate nach Spalte f (6) absteigend sortieren
Selection.Sort Key1:=Cells(DuplikatStartPos, 6), Order1:=xlDescending, Header:=xlNo ', Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
' allle zeilen ausser die erste innerhalb des bereichs ausschneiden
Rows(CStr(DuplikatStartPos + 1) & ":" & DuplikatEndPos).Delete Shift:=xlUp
'zählerkorrektur wegen des ausschneidens
i = i - (DuplikatEndPos - DuplikatStartPos)
End If
' den zähler wieder auf null stellen
iDuplikat = 0
End If
' zähler für nächste zeile
i = i + 1
Wend
' bildschirmanzeige (aktualisierung) wieder einschalten
'Application.ScreenUpdating = True
'Application.StatusBar = ""
End Sub

Anzeige
AW: Doppelte Zeilen löschen funzt nicht ganz
Olaf
Hallo Alex,
vielen Dank für Deinen Code. Die Kommentierungen sind super für mich Anfänger.
ABer leider funkioniert der Code nur, wenn die beiden Zilen direkt untereinanderstehen.
Das tun Sie aber fast nie. Kann man das noch ändern, ohne das ich manuell sortieren muß.
Gruß
Olaf
AW: Doppelte Zeilen löschen funzt nicht ganz
alex
hi olaf,
dann wird das ganze kompliziert und langsam. du müsstest alle zelleninhalte in spalte a in ein datenfeld (array) inklusive der aktuellen position der zellen in der tabelle einlesen.
dann innerhalb dieses arrays sortieren, filtern und anhand der anfallenden positionsnummern die entsprechend verstreuten zeilen löschen.
warum geht vorher sortieren nicht?
(du könntest das sortieren ja auch automatisch ablaufen lassen, ohne dass der benutzer etwas davon sieht oder sich darum kümmern muss)
ciao, alex
Anzeige
AW: Doppelte Zeilen löschen funzt nicht ganz
25.03.2004 14:07:14
Olaf
Hi Alex,
stimmt, auf das vorherige sortieren hätte ich selber kommen können. Werde mich gleich mal dransetzen.
Gruß
Olaf
AW: ansatzmöglichkeit aus F1
Ray
In diesem Beispiel werden Zeilen im aktuellen Bereich in Arbeitsblatt 1 gelöscht, deren erste Zelle jeweils den gleichen Wert hat, wie die erste Zelle der vorherigen Zeile.
For Each rw In Worksheets(1).Cells(1, 1).CurrentRegion.Rows
this = rw.Cells(1, 1).Value
If this = last Then rw.Delete
last = this
Next
ggf erst sortieren dann ausführen
Gruß Ray
AW: gleiche Problem wie bei Alex
25.03.2004 13:39:33
Olaf
Hallo Ray,
siehe meine Antwort bei Alex.
Aber habe vielen Dank für Deine Mühe.
Guß
Olaf
Anzeige
ohne VBA:
Günther
Hi Olaf,
wenn Du in eine Hilfsspalte folgende Formel eingibst:
{=WENN(ZÄHLENWENN(A$1:A$11000;A1)&gt1;WENN(MAX(WENN(A$1:A$11000=A1;B$1:B$11000))&gtB1;"L";"");"")}
ARRAY-Formel: die geschweifte Klammmer nicht eingeben, sondern die Formeleinabe abschließen mit Strg+Umsch+Enter
erhälst du in den zu löschenden Zeilen das "L"-öschkennzeichen.
jetzt den Autofilter drauf
Bearbeiten / gehe zu / Inhalte / nur sichtbare Zellen
Zeilen löschen
Autofilter deaktivieren
Tabelle neu sortieren
Günther
AW: ohne VBA:
alex
hui,
nette möglichkeit!
ciao, alex

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige