Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Listbox füllen ohne doppelte Einträge

Forumthread: Listbox füllen ohne doppelte Einträge

Listbox füllen ohne doppelte Einträge
08.12.2013 15:09:35
Werner
Hallo Experten,
komme mit meinem Problem nicht weiter.
Ausgangslage: Ich habe ein Tabellenblatt "Jahrestabelle". Dort sind Personaldaten hinterlgt. In Spalte D5:D100 der Familienname, in Spalte E5:E100 der Vorname und in Spalte F5:F100 das Geburtsdatum.
Jetzt möchte ich diese Daten in eine mehrspaltige Listbox (3 Spalten) einlesen, ohne dass doppelte Werte angezeigt werden.
Das mache ich derzeit mit folgendem Code (von Rudi) über Scripting Dictionary.
Dim i As Long, n As Long
Dim Dic As Object, ArrValues, arrList()
Application.ScreenUpdating = False
'Listbox leer machen
Personalien.Clear
'Dictionary initialisieren
Set Dic = CreateObject("Scripting.Dictionary")
With Worksheets("Jahrestabelle")
i = .Range("D1000").End(xlUp).Row
If i > 4 Then
For i = 5 To i
Dic(.Cells(i, 4).Value) = Array(.Cells(i, 4).Value, .Cells(i, 5).Value, .Cells(i, 6).Value)
Next i
End If
End With
If Dic.Count Then
ArrValues = Dic.items
ReDim arrList(1 To Dic.Count, 1 To 3)
For i = 1 To Dic.Count
For n = 1 To 3
arrList(i, n) = ArrValues(i - 1)(n - 1)
Next
Next
Das funktioniert auch. Allerdings prüft er hier nur die Familiennamen und liest mir keine Dopplungen ein. Ich bräuchte aber eine Routine bei der geprüft wird ob Famillienname (Zelle D5), Vorname (Zelle E5) und Geburtsdatum (Zelle F5) identisch ist. Nur wenn alle drei Zellinhalte übereinstimmen also mehrfach vorkommen soll er die Daten nicht in die Listbox einlesen.
Danke Werner

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listbox füllen ohne doppelte Einträge
08.12.2013 16:26:28
Werner
Hallo Hajo,
nicht so ganz. Filtern über Textboxeinträge möchte ich das auch noch, da insgesamt 1000 Datensätze zusammen kommen können. Da dann durch zu scrollen und den richtigen zu suchen ist wohl etwas mühsam. Deshalb auch der andere Eintrag.
Hier geht es mir aber darum, dass er mir schon beim Einlesen nicht Datensätze unberücksichtigt lässt die beim Familienname doppelt sind, sich aber beim Vornamen und beim Geburtsdatum unterscheiden.
Gruß Werner

Anzeige
AW: Listbox füllen ohne doppelte Einträge
09.12.2013 09:38:26
Werner
Hallo Peter,
genau so!!! Herzlichen Dank.
Vielleicht kannst du mir bei einem weiteren Problem weiterhelfen. Die so erstellten Listboxeinträge würde ich jetzt gerne noch über drei Textboxen (Familienname, Vorname, Geburtsdatum) filtern. Also z.B. Eintrag von Müller in die Textbox Familienname zeigt mir nur noch die Einträge von Müller in der Listbox an.
Gruß Werner

Anzeige
AW: Listbox füllen ohne doppelte Einträge
09.12.2013 11:29:23
Peter
Hallo Werner,
versuche es mit der beigefügten Version.
Die zu filternden Begriffe können gern in Kleinbuchstaben eingegeben werden.
https://www.herber.de/bbs/user/88440.xls
Gruß Peter

AW: Listbox füllen ohne doppelte Einträge
09.12.2013 12:59:52
Peter
Hallo Werner,
eine noch etwas erweiterte Version.
https://www.herber.de/bbs/user/88442.xls
Gruß Peter

Anzeige
AW: Listbox füllen ohne doppelte Einträge
09.12.2013 16:13:42
Werner
Hallo Peter,
danke für die Unterstützung. Das funktioniert schon sehr gut, aber nicht ganz so wie ich es gerne hätte.
Wenn ich in die erste Textbox Müller eingebe soll er mir alle Müller anzeigen (das macht er auch) wenn ich dann in die zweite Textbox den Vornamen eingebe (z.B. Hans-Otto) dann soll er mir nur noch Müller, Hans-Otto anzeigen. Derzeit zeigt er mir aber weiterhin alle Müller an, egal ob ich einen Vornamen oder ein Geburtsdatum in eine Textbox eingebe.
So wie es jetzt ist, hast du mir aber schon sehr weiter geholfen, Danke.
Werner

Anzeige
AW: Listbox füllen ohne doppelte Einträge
09.12.2013 22:02:08
Peter
Hallo Werner,
das weitere Filtern sollte mit der hier beigefügten Version funktionieren
https://www.herber.de/bbs/user/88458.xls
Gruß Peter

AW: Listbox füllen ohne doppelte Einträge
10.12.2013 20:37:42
Werner
Hallo Peter,
genau so. Funktioniert wunderbar. Herzlichen Dank für die Hilfe.
Werner
Anzeige
;
Anzeige

Infobox / Tutorial

Listbox füllen ohne doppelte Einträge in Excel


Schritt-für-Schritt-Anleitung

Um eine Listbox in Excel zu füllen, ohne doppelte Einträge anzuzeigen, kannst du den folgenden VBA-Code verwenden. Dieser Code prüft, ob Familienname, Vorname und Geburtsdatum identisch sind, bevor die Daten in die Listbox eingelesen werden:

Dim i As Long, n As Long
Dim Dic As Object, ArrValues, arrList()
Application.ScreenUpdating = False
' Listbox leer machen
Personalien.Clear
' Dictionary initialisieren
Set Dic = CreateObject("Scripting.Dictionary")
With Worksheets("Jahrestabelle")
    i = .Range("D1000").End(xlUp).Row
    If i > 4 Then
        For i = 5 To i
            ' Prüfen, ob Kombination aus Nachname, Vorname und Geburtsdatum bereits im Dictionary vorhanden ist
            Dim key As String
            key = .Cells(i, 4).Value & "|" & .Cells(i, 5).Value & "|" & .Cells(i, 6).Value
            If Not Dic.Exists(key) Then
                Dic(key) = Array(.Cells(i, 4).Value, .Cells(i, 5).Value, .Cells(i, 6).Value)
            End If
        Next i
    End If
End With
If Dic.Count Then
    ArrValues = Dic.items
    ReDim arrList(1 To Dic.Count, 1 To 3)
    For i = 1 To Dic.Count
        For n = 1 To 3
            arrList(i, n) = ArrValues(i - 1)(n - 1)
        Next
    Next
    ' Hier kannst du arrList der Listbox zuweisen
End If

Dieser Code stellt sicher, dass nur eindeutige Kombinationen von Nachnamen, Vornamen und Geburtsdatum in die Listbox eingetragen werden.


Häufige Fehler und Lösungen

  1. Fehler: Die Listbox zeigt immer noch doppelte Einträge an. Lösung: Stelle sicher, dass die Schlüssel für das Dictionary korrekt generiert werden (siehe key im obigen Code).

  2. Fehler: Listbox bleibt leer. Lösung: Überprüfe, ob die Daten im angegebenen Bereich (D5:D100) tatsächlich vorhanden sind. Möglicherweise ist der Bereich falsch definiert.


Alternative Methoden

Eine alternative Methode zur Vermeidung von doppelten Einträgen ist die Verwendung von Excel-Formeln oder Pivot-Tabellen. Wenn du die Daten vor der Verwendung in einer Listbox filtern möchtest, kannst du auch die Funktion „Daten > Duplikate entfernen“ in Excel verwenden, um eine separate Liste ohne Duplikate zu erstellen.


Praktische Beispiele

Hier ein Beispiel, wie du die Listbox nach Namen filtern kannst. Wenn du in eine Textbox einen Nachnamen eingibst, kannst du die Listbox entsprechend anpassen:

Private Sub txtFamilienname_Change()
    Dim filterName As String
    filterName = LCase(txtFamilienname.Text) ' Kleinbuchstaben für den Vergleich
    Dim i As Long
    For i = 0 To Personalien.ListCount - 1
        If InStr(1, LCase(Personalien.List(i, 0)), filterName) = 0 Then
            Personalien.Selected(i) = False
        Else
            Personalien.Selected(i) = True
        End If
    Next i
End Sub

Tipps für Profis

  • Nutze die Option Explicit-Anweisung am Anfang deiner Module, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft dir, Fehler zu vermeiden.
  • Setze Breakpoints im VBA-Editor, um den Code Schritt für Schritt zu überprüfen und Probleme schnell zu identifizieren.
  • Experimentiere mit der AutoFilter-Funktion von Excel, um Daten vor dem Einlesen in die Listbox weiter zu filtern.

FAQ: Häufige Fragen

1. Frage
Wie kann ich die Listbox mit mehr als drei Spalten füllen?
Antwort: Du kannst das ReDim arrList-Statement anpassen, um die Anzahl der Spalten zu erhöhen. Achte darauf, auch die Schleife entsprechend zu ändern.

2. Frage
Funktioniert dieser Code in Excel 2016?
Antwort: Ja, der Code sollte in Excel 2016 und neueren Versionen problemlos funktionieren, solange du die richtigen Referenzen gesetzt hast.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige