Mehrfachauswahl in Excel-Dropdowns ohne Duplikate (VBA-Guide)

Melden

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.

  1. Markiere die Zellen, in denen das Dropdown erscheinen soll.
  2. Gehe im Menüband auf den Reiter Daten -> Datenüberprüfung.
  3. Wähle unter "Zulassen" den Punkt Liste aus.
  4. Gib bei "Quelle" entweder deine Werte direkt ein (z. B. Apfel;Birne;Banane) oder markiere einen Bereich in deiner Tabelle.
  5. Klicke auf OK.

Schritt 2: Den VBA-Editor öffnen

Da Excel diese Funktion nicht nativ unterstützt, nutzen wir ein "Ereignis-Makro".

  1. Klicke mit der rechten Maustaste unten auf den Namen deines Tabellenblatts (z. B. "Tabelle1").
  2. Wähle Code anzeigen.
  3. 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.

  1. Gehe auf Datei -> Speichern unter.
  2. Wähle als Dateityp Excel-Arbeitsmappe mit Makros (.xlsm).
  3. 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 Error einfü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!

0