Doppelte Zeilen löschen

Viel Zeit und Mühe kann Ihnen dieses Makro sparen, wenn Sie aus einer Tabelle doppelte Zeilen löschen wollen. Praktische Anwendungsbeispiele sind z.B. doppelte Kundendatensätze löschen, Postleitzahlenlisten bereinigen oder Adressdaten auf doppelte Einträge prüfen.

Teil 1: Mit unterschiedlichen Varianten die letzte benutzte Zeile oder Spalte ermitteln/
Teil 2: Leere Zeilen in Exceltabellen löschen
Teil 3: Doppelte Zeilen löschen
Teil 4: Spalten und Zeilen in Excel Tabellen ohne großen Aufwand tauschen

Für das kurze Beispiel wird die Spalte A auf doppelte Einträge geprüft und wenn doppelte Einträge festgestellt werden, die jeweilige Zeile komplett gelöscht. Achtung: Sie können die Änderungen eines ausgeführten Makros nicht wieder rückgängig machen. Am Besten speichern Sie vorher die Datei nochmals ab, um ggf. die gespeicherte Datei verwenden zu können, falls das Ergebnis nicht wie gewünscht ist.

Um das Makro zu nutzen zu können, fügen Sie den Excel Makro-Programmcode in ein Modul einfügen:

Sub DoppelteZeilenLöschen()

Dim letzteZeile As Long
Dim Zeile As Long

letzteZeile = Range("A" & Rows.Count).End(xlUp).Row

For Zeile = letzteZeile To 1 Step -1
  If WorksheetFunction.CountIf(Range("A1:A" & Zeile), Range("A" & Zeile)) > 1 Then
    Rows(Zeile).EntireRow.Delete
  End If
Next

End Sub

Anzahl der Zeilen abhängig von der genutzten Excel-Version

Wichtig: Statt Rows.Count kann auch eine Zahl für die Ermittlung der letzten Zeile angegeben werden. Dies ist jedoch nicht zu empfehlen, da die Anzahl der vorhandenen Zeilen abhängig von der genutzter Excel-Version ist. Die angegebene Zeilenzahl 65536 in der Programmzeile “letzteZeile = Range(“A65536″).End(xlUp).Row” bezieht sich auf die Excel-Versionen bis Excel 2003. Ab Excel 2007 gibt es bis zu 1048576 Zeilen. Möchten Sie den VBA-Code für Excel-Versionen ab Excel 2007 nutzen, ändern Sie die Zeile wie folgt ab: “letzteZeile = Range(“1048576″).End(xlUp).Row”. So gehen Sie sicher, dass auch Inhalte nach der Zeile 65536 berücksichtigt werden. Bei älteren Versionen dagegen würde die geänderte Version zu einem Absturz des Makros führen!

Anschließend können Sie Ihn über das Menü “Extras”, “Makro”, “Makros” oder über eine Schaltfläche ausführen. Wie Sie eine Schaltfläche mit einem Makro belegen wird im Beitrag “Erste Schritte” beschrieben.

Alternativ können Sie folgende Beispieldatei verwenden:
Excel Makro: Doppelte Zeilen Löschen

Alternative mit Bordmitteln: Duplikate entfernen

Falls einzig die Entfernung von doppelten Werten innerhalb eines definierten Zellbereichs erfolgen soll, gibt es mit der Funktion „Duplikate entfernen in neueren Office Versionen eine mögliche Alternative zum oben bereitgestellten VBA Code. Die Vorteile dieser Excel Standardfunktion sind die größere Performance bei großen Datenmengen und die Flexibilität bei der Definition was als Dublette angesehen werden soll.

Es gibt nicht nur Vorteile, sondern auch einige Nachteile bei dieser Variante zu beachten, die in einigen Konstellationen gegen eine Nutzung sprechen. Die Funktion hält nicht ganz, was der Tooltip (siehe Abbildung unten) verspricht.

Alternative zum VBA-Makro: Doppelte Zeilen löschen

Einschränkungen der Standardfunktion „Duplikate entfernen“

Mit der Standardfunktion „Duplikate entfernen“ wird eben nicht die ganze Zeile gelöscht, sondern jeweils nur die Inhalte in einem zuvor ausgewählten Zellbereich. Nicht markierte und nicht zusammenhängende Bereiche bleiben unverändert stehen.

Standardfunktion Duplikate entfernen ausführen

Abbildung: vorher

Inhalte unterhalb oder rechts neben der Datentabelle bleiben damit gänzlich unberücksichtigt. Zeilen unterhalb der Tabelle verlieren so den Anschluss, wenn die Werte darüber teilweise entfernt werden. Gibt es in der Tabelle eine vollständig leere Spalte, muss aktiv der Bereich vollständig ausgewählt werden. Excel markiert sonst beim Start der Funktion nur den zusammenhängenden Zellbereich zur aktuell aktiven Zelle.

Die außerhalb der Markierung liegenden Tabellenbereiche, bleiben bei der Entfernung von Duplikaten immer unberücksichtigt. Falls eine Abhängigkeit zum bereinigten Zellbereich besteht, sind diese Daten dann nicht mehr den richtigen Zeilen zugeordnet. Hintergrund: Durch die gelöschten Duplikate verkleinert sich der Zellbereich nach oben (siehe Abbildungen vorher/nachher)! Die Entfernung von Duplikaten über die Excel Standardfunktion kann in diesem Fall jedoch wieder rückgängig gemacht werden.

Die Standardfunktion Duplikate entfernen löscht nicht die gesamte Zeile

Abbildung: nachher

Die Formulierung “Doppelte Zeilen aus einem Blatt löschen” im Hinweistext zur Standardfunktion “Duplikate entfernen” ist deshalb missverständlich, da nicht tatsächlich die ganze Zeile gelöscht wird, sondern nur die doppelten Werte innerhalb eines markierten Zellbereichs.

Weiterlesen…
Mit unterschiedlichen Varianten die letzte benutzte Zeile oder Spalte ermitteln/
Spalten und Zeilen in Excel Tabellen ohne großen Aufwand tauschen
Leere Zeilen in Exceltabellen löschen

 
Gefällt Ihnen der Beitrag?

12 Gedanken zu „Doppelte Zeilen löschen“

    • @Silvan: Stimmt, das ist die bessere Variante. Ursprünglich hatte ich die Variante mit Range(“A65536”) verwendet, um auch VBA Anfängern die Funktionsweise besser näherbringen zu können. Ich habe jedenfalls die Erfahrung gemacht, dass diese Variante besser zu vermitteln ist. Da in der Zwischenzeit aber die überwiegende Anzahl der Office-Anwender mit einer neueren Excel-Version (ab Version 2007) ist diese Variante natürlich inzwischen problematisch. Je nach Version muss mit einer unterschiedlichen letzten möglichen Zeile gearbeitet werden. Daher ist die Variante mit Rows.Count inzwischen absolut zu empfehlen. Bei Gelegenheit werde ich die veröffentlichten Codes noch entsprechend anpassen.

      Viele Grüße
      Marco

      Antworten
    • @RPP63: Die Funktion Duplikate entfernen ist in der Tat sehr nützlich und nutze ich persönlich auch ziemlich oft. Mit dieser Excel-Standardfunktion wird jedoch nicht eine gesamte Zeile gelöscht, sondern nur ein markierter Zellbereich auf doppelte Werte geprüft und die darin enthaltenen doppelten Werte entfernt.

      Den Beitrag habe ich heute ergänzt und die Unterschiede zwischen diesen beiden Varianten erklärt.

      Antworten
  1. Hallo,

    vielen Dank für diesen sehr hilfreichen Beitrag! Er funktioniert sehr gut, allerdings würde ich gerne eine kleine Ausnahme einfügen und bitte dabei um Hilfe.
    Es sollen doppelte Werte nur gelöscht werden, wenn die Zelle nicht leer ist.
    Ich habe eine Liste mit Bestellnummern, die über eine hinterlegte Formel aus einem anderen Excel Dokument geholt werden. In leeren Zellen ist also eine Formel eingetragen, aber noch keine Nummer, da diese erst mit der Zeit in dem anderen Dokument ergänzt werden.
    Lass ich nun die Funktion durchlaufen, werden auch die leeren Felder mit hinterlegter Formel gelöscht. Die hinterlegte Formel ist dann weg.
    Ist es möglich hier eine Ausnahme einzubeziehen?

    Vielen herzlichen Dank und liebe Grüße
    Kristina

    Antworten
  2. Frohe Ostern Marco,

    im Netz fand ich – ewiger Anfänger – Dein tolles Makro. Auf der rechten Seite der Tabelle, ab G habe ich noch eine Art storyboard, what to do, … untergebracht, sodaß nur alle Mehrfach-Einträge zwischen A6 und H, bis Ende gelöscht werden sollen, in denen in B und C ! Doubletten erscheinen. In

    If WorksheetFunction.CountIf(Range(“B6:B” & Zeile), Range(“B” & Zeile)) > 1 And WorksheetFunction.CountIf(Range(“C6:C” & Zeile), Range(“C” & Zeile)) > 1 Then
    ‘ Rows(Zeile).EntireRow.Delete
    Range(Cells(Zeile, 1), Cells(Zeile, 8)).ClearContents
    End If

    habe ich Dein .Delete durch Range und ClearContents ersetzt, was aber leider Leerzeilen produziert. Magst Du mir sagen, wie ich die verhindern kann ?

    Besten Dank Klaus

    Antworten
  3. Hallo Marco,

    ich hoffe du bist noch aktiv.
    Dein Makro hat mir einen ersten Schritt abnehmen und erklären können.
    Jetzt möchte ich in meiner Tabelle aber nur dann die Zeile löschen wenn sowohl der Eintrag in “A” als auch in “D” übereinstimmt. bekomme das grade irgendwie nicht hin, kannst du mir dabei evtl helfen?

    Beispiel:
    Habe Material an verschiedenen Lagerplätzen.
    Bisher wenn ich das Makro nutze wird jedes doppelte Material gelöscht, leider halt auch die unterschiedlichen Plätze. Möchte aber wenn es mehrere Orte hat die behalten.

    Ich danke

    Antworten

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.