Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Listbox ohne Duplikate befüllen

Forumthread: Listbox ohne Duplikate befüllen

Listbox ohne Duplikate befüllen
14.04.2026 15:59:27
Sindy
Hallo alle da draußen,

ich möchte in einer Listbox in einem UserForm in Word eine Liste ohne Duplikate erstellen. Im Internet habe ich schon gesucht, KI befragt und versucht was zu erstellen aber ich komme zu keinem Ergebnis.

In Word öffne ich per Button ein Userform. In dem UserForm ist eine Textbox in er ich den Suchbegriff eingebe und drunter eine ListBox in der die Ergebnisse aufgelistet werden sollen. Wenn ich jetzt in der Textbox "Schokolade" eingebe sollen alle Zelleninhalte der Spalte O aufgelistet werden in der der Begriff steht. Die Liste soll ohne Duplikate erstellt werden.

Die Codes die ich gefunden habe für nicht zu dem Ergebnis bzw ich kannes nicht umsetzen. Ich habe zwar meine Parameter eingestellt aber ich bekomme nicht mal eine Fehlermeldung. Könnte mir bitte jemand helfen?

Grüße Sindy
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Listbox ohne Duplikate mit "enthält" befüllen
14.04.2026 16:11:17
{Boris}
Hi,

ich hab ChatGPT folgende Frage gestellt:

Ich habe eine Listbox in einem Userform, in die ich alle Einträge aus Spalte A ohne Duplikate einlesen möchte. Dabei möchte ich einen Suchbegriff eingeben und in Spalte A soll nach "enthält" gesucht werden und alle Unikate in die Listbox eingelesen werden. Wie lautet der VBA-Code dazu?


Und diese Antwort erhalten (ungetestet):

Private Sub ListBoxFuellen(Optional Suchbegriff As String = "")

Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim dict As Object
Dim Wert As String

Set ws = ThisWorkbook.Worksheets("Tabelle1") ' anpassen!
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

Set dict = CreateObject("Scripting.Dictionary")

' Listbox leeren
Me.ListBox1.Clear

' Schleife durch Spalte A
For i = 1 To lastRow
Wert = ws.Cells(i, 1).Value

' Nur wenn nicht leer
If Wert > "" Then

' Suchfilter ("enthält")
If Suchbegriff = "" Or LCase(Wert) Like "*" & LCase(Suchbegriff) & "*" Then

' Nur Unikate
If Not dict.exists(Wert) Then
dict.Add Wert, Nothing
End If

End If

End If
Next i

' Dictionary in ListBox schreiben
If dict.Count > 0 Then
Me.ListBox1.List = dict.Keys
End If

End Sub


VG, Boris
Anzeige
eine Zeile verstehe ich nicht
15.04.2026 00:53:02
Sindy
Hi Boris, es scheint zu funktionieren, aber ich verstehe diese Zeile nicht "If Suchbegriff = "" Or LCase(Wert) Like "*" & LCase(Suchbegriff) & "*" Then" was bedeutet die? Muss ich hier irgendwas eintragen?
eine Zeile verstehe ich nicht
15.04.2026 01:10:58
daniel
Hi
diese Zeile ist die von dir gewünschte Filterfunktion ("Schokolade")
Den Text, nach dem gefiltet werden soll, musst du beim Aufruf des Makros als Parameter mit angeben:

Call ListBoxFuellen("Schokolade")

oder
ListBoxFuellen "Schokolade"


also um ganzen so, wenn du das Makro aus einem anderen Makro heraus startest und den Suchbegriff eingeben willst
Sub test()

dim Suchbegriff as String
Suchbegriff = Inputbox("Was soll in die Liste?")
Call ListBoxFuellen(Suchbegriff)
end Sub

Private Sub ListBoxFuellen(Optional Suchbegriff As String = "")
...


Gruß Daniel
Anzeige
Listbox ohne Duplikate befüllen
14.04.2026 16:57:40
daniel
Hi

am einfachsten und für kurze Listen so:

dim x

dim i as long

for each x in range(..hier den Zellbereich mit daten angeben...).value
for i = 0 to Listbox1.ListCount - 1
if Listbox1.List(i) = x then exit for
next
if i = Listbox1.Listcount then Listbox1.additem x
next


hier prüfst du, ob der Wert schon in der Liste drin ist und wenn nein, wird er hin zugefügt.
ausgenutzt wird hier, dass bei einem vollständigen Schleifendurchlauf der Schleifenzähler um 1 (bzw die Stepweite) größer ist als der vorgegebene Endwert.
Dadurch kann man erkennen, ob vorzeitig abgebrochen wurde oder nicht.

Gruß Daniel
Anzeige
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18