Funktionsweise und Einsatzzweck
Unten im Artikel finden Sie das VBA-Makro, welches Excel-Listen systematisch nach doppelten Einträgen durchsucht und hebt diese durch farbliche Markierung hervor. Ein entscheidender Vorteil: Die Daten müssen nicht vorab sortiert werden. Das Makro arbeitet zuverlässig mit jeder beliebigen, ungeordneten Datenliste.
Wichtige Hinweise zur Installation
Fügen Sie den Code ausschließlich in ein separates Code-Modul ein, nicht direkt in ein Tabellenblatt. Dies gewährleistet die korrekte Funktionsweise und verhindert Fehler bei der Ausführung.
Ablauf des Makros im Detail
Schritt 1: Festlegung des Prüfbereichs
Beim Start erscheint ein Dialogfenster, in dem Sie die Startzelle angeben. Beispiele für gültige Eingaben sind "A1", "F6" oder jede andere Zellenadresse. Ab dieser Position beginnt das Makro mit der Duplikatsprüfung.
Schritt 2: Automatische Bereichserkennung
Das Programm ermittelt eigenständig den zusammenhängenden Datenbereich ausgehend von Ihrer Startzelle. Sie müssen die Listengröße nicht manuell definieren.
Schritt 3: Vergleichsprozess
Das Makro durchläuft die Liste mehrfach und vergleicht jeden Eintrag systematisch mit allen nachfolgenden Werten. Dieser Algorithmus stellt sicher, dass wirklich alle Duplikate erfasst werden.
Schritt 4: Farbliche Kennzeichnung
- Erste Duplikate werden blau markiert (ColorIndex = 5)
- Weitere doppelte Einträge erhalten eine rote Markierung (ColorIndex = 3)
- Leere Zellen bleiben unberücksichtigt und werden nicht eingefärbt
- Bereits markierte Zellen werden nicht erneut bearbeitet
Technische Details zum Code
Das Makro nutzt verschiedene Excel-Objekte und Variablen:
- Spalten: Speichert den gesamten zusammenhängenden Datenbereich
- zelle1/zelle2: Referenzzellen für den Vergleichsvorgang
- Schleifenvariablen (x, y, z, i): Steuern die Durchläufe durch die Liste
- eing: Nimmt die Benutzereingabe der Startzelle auf
Leistungsoptimierung während der Ausführung
Für schnellere Verarbeitung deaktiviert das Makro temporär die Bildschirmaktualisierung (ScreenUpdating = False) und schaltet auf manuelle Berechnung (Calculation = xlCalculationManual). Nach Abschluss werden beide Funktionen automatisch wiederhergestellt.
Rückkehr zum Ausgangszustand
Am Ende springt die Zellenauswahl automatisch zu Zelle A1 zurück. Die Excel-Einstellungen für Bildschirmdarstellung und Berechnungsmodus werden auf ihre Standardwerte zurückgesetzt.
Praktische Anwendungsbeispiele
Dieses Makro eignet sich hervorragend für:
- Kundenlisten mit potenziellen Mehrfacheinträgen
- Artikelnummern in Bestandsverzeichnissen
- E-Mail-Adressen in Verteilerlisten
- Mitarbeiterdaten zur Qualitätssicherung
- Beliebige Datensätze, die auf Eindeutigkeit geprüft werden müssen
Die farbliche Unterscheidung ermöglicht eine schnelle visuelle Kontrolle und erleichtert die anschließende Bereinigung der Datenbasis erheblich.
Erfassen Sie dieses Makro ist in ein Code-Modul, nicht in ein Tabellenblatt.
Option Explicit
Sub Duplikate_Markieren_Verbessert()
Dim ws As Worksheet
Dim startZelle As Range
Dim datenBereich As Range
Dim zelle As Range
Dim vergleichsZelle As Range
Dim startAdresse As String
Dim gefundeneDuplikate As Object
Dim schluessel As String
' Worksheet festlegen
Set ws = ActiveSheet
' Startzelle abfragen
On Error Resume Next
startAdresse = InputBox("Bitte geben Sie die Startzelle ein (z.B. A1 oder F6):", _
"Startposition für Duplikatsprüfung", "A1")
If startAdresse = "" Then
MsgBox "Vorgang abgebrochen.", vbInformation
Exit Sub
End If
Set startZelle = ws.Range(startAdresse)
If startZelle Is Nothing Then
MsgBox "Ungültige Zellenadresse!", vbExclamation
Exit Sub
End If
On Error GoTo 0
' Datenbereich ermitteln
Set datenBereich = startZelle.CurrentRegion
If datenBereich.Cells.Count = 1 Then
MsgBox "Kein zusammenhängender Datenbereich gefunden.", vbInformation
Exit Sub
End If
' Performance-Optimierung
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
' Dictionary für schnellere Duplikatserkennung
Set gefundeneDuplikate = CreateObject("Scripting.Dictionary")
' Zuerst alle Formatierungen entfernen
datenBereich.Interior.ColorIndex = xlNone
' Durch alle Zellen iterieren
For Each zelle In datenBereich.Cells
If zelle.Value <> "" Then
schluessel = CStr(zelle.Value)
If gefundeneDuplikate.Exists(schluessel) Then
' Duplikat gefunden - rot markieren
zelle.Interior.Color = RGB(255, 200, 200) ' Hellrot
' Auch das Original rot markieren (falls noch nicht geschehen)
If gefundeneDuplikate(schluessel).Interior.ColorIndex = xlNone Then
gefundeneDuplikate(schluessel).Interior.Color = RGB(255, 200, 200)
End If
Else
' Ersten Eintrag speichern
gefundeneDuplikate.Add schluessel, zelle
End If
End If
Next zelle
' Ursprungszustand wiederherstellen
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
' Ergebnis anzeigen
Dim anzahlDuplikate As Long
anzahlDuplikate = 0
For Each zelle In datenBereich.Cells
If zelle.Interior.Color = RGB(255, 200, 200) Then
anzahlDuplikate = anzahlDuplikate + 1
End If
Next zelle
If anzahlDuplikate > 0 Then
MsgBox anzahlDuplikate & " Zelle(n) mit doppelten Einträgen wurden markiert.", vbInformation
Else
MsgBox "Keine Duplikate gefunden.", vbInformation
End If
' Zur Startzelle zurückkehren
startZelle.Select
End Sub
Die Beispieldatei können Sie über den folgenden Link herunterladen.

