Mehrfachauswahl in Excel-Dropdowns ohne Duplikate (VBA-Guide)
Hier ist ein ausführliches Tutorial, wie du in Excel eine Mehrfachauswahl für Dropdown-Menüs (Datenüberprüfung) erstellst, bei der Duplikate automatisch verhindert werden.
Standardmäßig erlaubt Excel in einer Dropdown-Liste nur die Auswahl eines einzigen Wertes. Wählt man einen neuen Wert aus, wird der alte überschrieben. Mit einem kleinen VBA-Skript können wir dieses Verhalten ändern, sodass neue Auswahlmöglichkeiten einfach mit einem Komma getrennt hinzugefügt werden – vorausgesetzt, sie sind noch nicht in der Zelle vorhanden.
Schritt 1: Die normale Dropdown-Liste erstellen
Bevor wir zum Code kommen, musst du eine ganz normale Dropdown-Liste vorbereiten.
- Markiere die Zellen, in denen das Dropdown erscheinen soll.
- Gehe im Menüband auf den Reiter Daten -> Datenüberprüfung.
- Wähle unter "Zulassen" den Punkt Liste aus.
- Gib bei "Quelle" entweder deine Werte direkt ein (z. B.
Apfel;Birne;Banane) oder markiere einen Bereich in deiner Tabelle. - Klicke auf OK.
Schritt 2: Den VBA-Editor öffnen
Da Excel diese Funktion nicht nativ unterstützt, nutzen wir ein "Ereignis-Makro".
- Klicke mit der rechten Maustaste unten auf den Namen deines Tabellenblatts (z. B. "Tabelle1").
- Wähle Code anzeigen.
- Ein Fenster (Microsoft Visual Basic for Applications) öffnet sich.
Schritt 3: Den VBA-Code einfügen
Kopiere den folgenden Code und füge ihn exakt so in das weiße Fenster des Editors ein:
Private Sub Worksheet_Change(ByVal Target As Range)
' Deklaration der Variablen
Dim Oldvalue As String
Dim Newvalue As String
Dim Separator As String
' Trennzeichen festlegen (hier Komma und Leerzeichen)
Separator = ", "
' Fehlerbehandlung: Falls mehrere Zellen gleichzeitig geändert werden
On Error GoTo ExitSub
If Target.Count > 1 Then Exit Sub
' Überprüfen, ob die Zelle eine Datenüberprüfung (Dropdown) hat
If Target.Validation.Type = 3 Then
' Ereignisse vorübergehend deaktivieren, um Endlosschleife zu verhindern
Application.EnableEvents = False
Newvalue = Target.Value
Application.Undo
Oldvalue = Target.Value
Target.Value = Newvalue
If Oldvalue <> "" Then
If Newvalue <> "" Then
' Überprüfen, ob der neue Wert bereits vorhanden ist (Duplikatsprüfung)
If InStr(1, Oldvalue & Separator, Newvalue & Separator) > 0 Then
' Wert ist bereits vorhanden -> alten Wert beibehalten
Target.Value = Oldvalue
MsgBox "Dieser Wert wurde bereits ausgewählt.", vbInformation, "Duplikat erkannt"
Else
' Wert ist neu -> anhängen
Target.Value = Oldvalue & Separator & Newvalue
End If
End If
End If
End If
ExitSub:
Application.EnableEvents = True
End Sub
Schritt 4: Funktionsweise erklärt
- Target.Validation.Type = 3: Das Makro prüft, ob die Zelle überhaupt ein Dropdown-Menü enthält. Nur dann wird der Code ausgeführt.
- Application.Undo: Das Makro merkt sich kurz den alten Wert, bevor es den neuen Wert hinzufügt.
- InStr(...): Diese Funktion prüft, ob der neu gewählte Begriff bereits in der Zelle steht. Wenn ja, wird die Eingabe abgelehnt und eine Nachricht ausgegeben.
- Separator: Du kannst im Code statt
,auch ein;oder einen Zeilenumbruch (vbCrLf) verwenden.
Schritt 5: Die Datei richtig speichern
Damit das Makro funktioniert, darf die Datei nicht als normale .xlsx-Datei gespeichert werden.
- Gehe auf Datei -> Speichern unter.
- Wähle als Dateityp Excel-Arbeitsmappe mit Makros (.xlsm).
- Bestätige das Speichern.
Tipps & Fehlerbehebung
- Löschen von Inhalten: Wenn du die Zelle komplett leeren willst, markiere sie und drücke die
Entf-Taste. Das Makro erkennt dies und leert die Zelle. - Spalten einschränken: Wenn das Makro nur in einer bestimmten Spalte (z. B. Spalte B) funktionieren soll, kannst du am Anfang des Codes folgende Zeile nach dem
On Erroreinfügen:If Intersect(Target, Range("B:B")) Is Nothing Then Exit Sub - Makros aktivieren: Wenn du die Datei öffnest, erscheint meist eine gelbe Leiste am oberen Rand. Du musst auf Inhalt aktivieren klicken, damit die Mehrfachauswahl funktioniert.
Jetzt kannst du in deinem Dropdown mehrere Begriffe nacheinander auswählen, und Excel fügt sie automatisch zu einer Liste in der Zelle zusammen – ganz ohne Duplikate!