Entfernen von doppelten Werten in Excel-VBA

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Zakarya El Oirzadi

Last updated on Oktober 30, 2023

In diesem Tutorial wird gezeigt, wie man Duplikate mit der RemoveDuplicates-Methode in VBA entfernt.

RemoveDuplicates-Methode

Wenn Daten in ein Excel-Arbeitsblatt importiert oder eingefügt werden, können sie oft doppelte Werte enthalten. Möglicherweise müssen Sie die eingehenden Daten bereinigen und Duplikate entfernen.

Glücklicherweise gibt es eine einfache Methode innerhalb des Range-Objekts von VBA, mit der Sie dies tun können.

Range("A1:C8").RemoveDuplicates Columns:=1, Header:=xlYes

Die Syntax lautet: RemoveDuplicates([Columns],[Header]

  • [Columns] – Geben Sie an, welche Spalten auf doppelte Werte geprüft werden. Alle Spalten müssen übereinstimmen, um als Duplikat zu gelten.
  • [Header] – Haben die Daten eine Kopfzeile? xlNo (Standard), xlYes, xlYesNoGuess

Technisch gesehen sind beide Parameter optional. Wenn Sie jedoch das Argument Columns nicht angeben, werden keine Duplikate entfernt.

Der Standardwert für Header ist xlNo. Natürlich ist es besser, dieses Argument anzugeben, aber wenn Sie eine Kopfzeile haben, ist es unwahrscheinlich, dass die Kopfzeile als Duplikat erkannt wird.

RemoveDuplicates-Verwendungshinweise

  • Bevor Sie die Methode RemoveDuplicates verwenden, müssen Sie einen Bereich angeben, der verwendet werden soll.
  • Die Methode RemoveDuplicates entfernt alle Zeilen mit gefundenen Duplikaten, behält aber die Originalzeile mit allen Werten bei.
  • Die RemoveDuplicates-Methode funktioniert nur für Spalten und nicht für Zeilen, aber es kann ein VBA-Code geschrieben werden, um diese Situation zu ändern (siehe später).

Beispieldaten für VBA-Beispiele

Um zu zeigen, wie der Beispielcode funktioniert, werden die folgenden Beispieldaten verwendet:

excel liste mit zeilenduplikaten

Doppelte Zeilen entfernen

Mit diesem Code werden alle doppelten Zeilen entfernt, die nur auf den Werten in Spalte A basieren:

Sub DuplikateEntfernenBeisp1()
Range("A1:C8").RemoveDuplicates Columns:=1, Header:=xlYes
End Sub

Beachten Sie, dass wir den Bereich „A1:C8“ explizit definiert haben. Stattdessen können Sie den Bereich UsedRange verwenden. UsedRange ermittelt die zuletzt verwendete Zeile und Spalte Ihrer Daten und wendet RemoveDuplicates auf diesen gesamten Bereich an:

Sub DuplikateEntfernen_UsedRange()
ActiveSheet.UsedRange.RemoveDuplicates Columns:=1, Header:=xlYes
End Sub

UsedRange ist unglaublich nützlich, da Sie den Bereich nicht mehr explizit definieren müssen.

Nachdem Sie diesen Code ausgeführt haben, sieht Ihr Arbeitsblatt nun wie folgt aus:

excel liste ohne zeilenduplikaten

Da nur Spalte A (Spalte 1) angegeben wurde, wurde das Duplikat „Apfel“, das vorher in Zeile 5 gestanden hatte, entfernt. Die Menge (Spalte 2) ist jedoch anders.

Um Duplikate zu entfernen und mehrere Spalten zu vergleichen, können wir diese Spalten mit einer Array-Methode angeben.

Entfernen von Duplikaten durch Vergleich mehrerer Spalten

Sub DuplikateEntfernen_MehrereSpalten()
ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(1, 2) , Header:=xlYes
End Sub

Das Array weist VBA an, die Daten mit den beiden Spalten 1 und 2 (A und B) zu vergleichen.

Die Spalten im Array müssen nicht in aufeinanderfolgender Reihenfolge sein.

Sub EinfachesBeispiel()
ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(3, 1) , Header:=xlYes
End Sub

In diesem Beispiel werden die Spalten 1 und 3 für den Vergleich der Duplikate verwendet.

In diesem Codebeispiel werden alle drei Spalten verwendet, um auf Duplikate zu prüfen:

Sub EinfachesBeispiel()
ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(1, 2, 3) , Header:=xlYes
End Sub

Entfernen von doppelten Zeilen aus einer Tabelle

Die Funktion RemoveDuplicates kann auch auf eine Excel-Tabelle in genau derselben Weise angewendet werden. Die Syntax ist jedoch etwas anders.

Sub EinfachesBeispiel()
ActiveSheet.ListObjects("Tabelle1").DataBodyRange.RemoveDuplicates Columns:=Array(1, 3), _
Header:=xlYes
End Sub

Damit werden die Duplikate in der Tabelle auf der Grundlage der Spalten 1 und 3 (A und C) entfernt. Die Farbformatierung der Tabelle wird jedoch nicht bereinigt und es bleiben farbige Leerzeilen am unteren Rand der Tabelle zurück.

Entfernen von Duplikaten aus Arrays

Wenn Sie doppelte Werte aus einem Array entfernen müssen, können Sie das Array natürlich auch in Excel ausgeben, die RemoveDuplicates-Methode verwenden und das Array erneut importieren. Wir haben jedoch auch eine VBA-Prozedur zum Entfernen von Duplikaten aus einem Array geschrieben.

Entfernen von Duplikaten aus Datenzeilen mit VBA

Die RemoveDuplicates-Methode funktioniert nur für Datenspalten, aber mit ein wenig Querdenken können Sie eine VBA-Prozedur erstellen, die auch Datenzeilen verarbeitet.

Nehmen wir an, dass Ihre Daten auf Ihrem Arbeitsblatt folgendermaßen aussehen:

excel liste mit spaltenduplikaten

Sie haben die gleichen Duplikate wie zuvor in den Spalten B und E, aber Sie können sie nicht mit der Methode RemoveDuplicates entfernen.

Die Lösung besteht darin, mit VBA ein zusätzliches Arbeitsblatt zu erstellen, die Daten dorthin zu kopieren, wobei Sie sie in Spalten transponieren, die Duplikate zu entfernen und sie dann zurückzukopieren, wobei Sie sie wieder in Zeilen transponieren.

Sub EinfachesInZeilen()
    'Die Bildschirmaktualisierung und die Warnmeldungen ausschalten - wir wollen, dass der Code reibungslos läuft, ohne dass der Benutzer sieht
    'was vor sich geht
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    'Ein neues Arbeitsblatt hinzufügen
    Sheets.Add After:=ActiveSheet
    'Das neue Arbeitsblatt 'Kopierblatt' nennen
    ActiveSheet.Name = "Kopierblatt"
    'Die Daten aus dem ursprünglichen Arbeitsblatt Kopieren
    Sheets("DataInRows").UsedRange.Copy
    'Das neu erstellte Blatt aktivieren
    Sheets("Kopierblatt").Activate
    'Beim Einfügen werden die Daten transponiert, so dass sie jetzt in Spalten stehen
    ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
   'Die Duplikate für die Spalten 1 und 3 entfernen
    ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(1, 3), Header _
        :=xlYes
    'Die Daten im ursprünglichen Arbeitsblatt löschen
    Sheets("DataInRows").UsedRange.ClearContents
    'Die Datenspalten aus dem neu erstellten Arbeitsblatt aktivieren
   Sheets("Kopierblatt").UsedRange.Copy
   'Das ursprüngliche Arbeitsblatt aktievieren
    Sheets("DataInRows").Activate
    
   'Beim Einfügen die nicht doppelten Daten transponieren
    ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    'Das Kopierblatt löschen - nicht mehr benötigt
    Sheets("Kopierblatt").Delete
    'Das Originalblatt aktivieren
    Sheets("DataInRows").Activate
    'Bildschirmaktualisierung und Warnungen wieder einschalten
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub

In diesem Code wird davon ausgegangen, dass die ursprünglichen Daten in Zeilen auf einem Arbeitsblatt mit der Bezeichnung „DataInRows“ gespeichert sind.

Nach der Ausführung des Codes wird Ihr Arbeitsblatt wie folgt aussehen:

excel liste ohne spaltenduplikaten

Das Duplikat „Apples“ in Spalte E ist jetzt entfernt worden. Der Benutzer befindet sich wieder in einer sauberen Position, in der keine fremden Arbeitsblätter herumliegen, und der gesamte Vorgang wurde reibungslos und ohne Bildschirmflackern oder Warnmeldungen durchgeführt.

vba-free-addin

Add-In für VBA-Code-Beispiele

Auf alle Code-Beispiele aus unserer Website einfach zugreifen.

Navigieren Sie einfach zum Menü, klicken Sie darauf und der Code wird direkt in Ihr Modul eingefügt. .xlam add-in.

(Keine Installation erforderlich!)

Kostenloser Download

Return to VBA Code Examples