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

Forumthread: Listbox - Doppelte Einträge verhindern

Listbox - Doppelte Einträge verhindern
KLE
Hallo - habe da noch eine Frage, diesmal habe ich auch eine Musterdatei erstellt - damit ihr besser seht und nachvollziehen könnt, was ich meine... ;o)
Also, meine Frage - WIE kann ich in der Listbox "Doppelte" Einträge vermeiden. Ich will wirklich immer nur einmal z.B. Lehmann oder Müller stehen haben...
Vielen Dank und Gruß
Kay
Musterdatei:
https://www.herber.de/bbs/user/72706.xlsm
Anzeige

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

Betreff
Benutzer
Anzeige
AW: Listbox - Doppelte Einträge verhindern
16.12.2010 10:35:01
gerwas
Hallo Kay
in irgendeinem Beitrag hier im Forum habe mal diese geniale Idee gefunden (mußt du anpassen):
Private Sub UserForm_Initialize()
Dim col As New Collection
arow = IIf(IsEmpty(Range("A65536")), Range("A65536").End(xlUp).Row, 65536)
On Error Resume Next
For iRow = 2 To arow
col.Add Cells(iRow, 1), Cells(iRow, 1) 'hier wird ein fehler erzeugt, wenn der eintrag  _
bereitsvorhanden ist
If Err = 0 And Cells(iRow, 1).Value  "TOTAL" Then
ComboBox1.AddItem Cells(iRow, 1)
Else
Err.Clear
End If
Next iRow
On Error GoTo 0
End Sub

Anzeige
was ist mit der ID? owT
16.12.2010 10:41:34
Rudi
AW: was ist mit der ID? owT
16.12.2010 11:20:52
KLE
Die ID ist zwar nett - aber Sie ist wird mit jedem Neuen Datensatz angelegt. Da es zu einem Namen mehrere Datensätze kommen kann...hält Sie mir zwar die Daten an sich sauber, wüsste aber nicht wie Sie mir bei der Vermeidung der Dopplung von Namen in der listbox helfen sollte ?!?
Bin für alles Dankbar !
Gruß
Kay
Anzeige
AW: was ist mit der ID? owT
16.12.2010 12:28:42
Rudi
Hallo,
die ID hilft dir nicht, sondern verhindert einmalige Namen in der LB.
Mal ohne die ID:
' Funktion zur Belegtext-Suche innerhalb der Datenreihe

Function fncListe2(Optional sText As String)
Dim oDaten As Object
i = 0
k = 0
n = 0
k = Worksheets("Daten").Cells(Rows.Count, 1).End(xlUp).Row
Set oDaten = CreateObject("Scripting.dictionary")
If k = 1 Then
ReDim Preserve arrListe2(0)
fncListe2 = arrListe2
Exit Function
Else
arrTmp2 = Worksheets("Daten").Range("A2:D" & k)
ReDim arrListe2(1 To UBound(arrTmp2))
For i = 1 To UBound(arrTmp2)
If LCase(arrTmp2(i, 2)) Like "*" & LCase(sText) & "*" Then
oDaten(arrTmp2(i, 2)) = 0
End If
Next
On Error Resume Next
fncListe2 = oDaten.keys
End If
End Function

Du musst aber deine Codes überarbeiten, da öfter nach [ oder ] gesucht wird.
Gruß
Rudi
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Doppelte Einträge in der Excel Listbox vermeiden


Schritt-für-Schritt-Anleitung

Um doppelte Einträge in einer Listbox in Excel zu vermeiden, kannst du folgenden VBA-Code verwenden. Dieser wird im UserForm_Initialize-Ereignis platziert:

Private Sub UserForm_Initialize()
    Dim col As New Collection
    arow = IIf(IsEmpty(Range("A65536")), Range("A65536").End(xlUp).Row, 65536)
    On Error Resume Next
    For iRow = 2 To arow
        col.Add Cells(iRow, 1), Cells(iRow, 1) ' Hier wird ein Fehler erzeugt, wenn der Eintrag bereits vorhanden ist
        If Err = 0 And Cells(iRow, 1).Value <> "TOTAL" Then
            ComboBox1.AddItem Cells(iRow, 1)
        Else
            Err.Clear
        End If
    Next iRow
    On Error GoTo 0
End Sub

Dieser Code fügt nur einzigartige Einträge in die Listbox ein. Achte darauf, die richtige Excel-Version zu verwenden, die VBA unterstützt, wie Excel 2010 oder höher.


Häufige Fehler und Lösungen

  • Fehler: Doppelte Einträge erscheinen trotzdem

    • Lösung: Überprüfe, ob der Code korrekt in das UserForm_Initialize-Ereignis eingefügt wurde und dass die Datenquelle in der richtigen Spalte angegeben ist.
  • Fehler: Code funktioniert nicht

    • Lösung: Stelle sicher, dass du die richtige Range und die richtigen Referenzen verwendest. Achte darauf, dass der Code in einem VBA-Modul und nicht in einem normalen Modul gespeichert ist.

Alternative Methoden

Eine weitere Methode, um doppelte Einträge zu filtern, ist die Verwendung eines Dictionaries. Hier ist ein Beispielcode:

Function fncListe2(Optional sText As String)
    Dim oDaten As Object
    Dim i As Long
    Dim k As Long
    k = Worksheets("Daten").Cells(Rows.Count, 1).End(xlUp).Row
    Set oDaten = CreateObject("Scripting.Dictionary")

    For i = 2 To k
        If Not oDaten.Exists(Cells(i, 1).Value) Then
            oDaten.Add Cells(i, 1).Value, Nothing
        End If
    Next i
    fncListe2 = oDaten.Keys
End Function

Diese Funktion kann zum Erstellen einer Liste ohne doppelte Einträge verwendet werden.


Praktische Beispiele

Angenommen, du hast eine Liste von Namen in Spalte A, beginnend ab Zeile 2. Der oben genannte VBA-Code würde dafür sorgen, dass nur einzigartige Namen in der Listbox angezeigt werden, sodass du beispielsweise nur "Müller" oder "Lehmann" einmal in der Dropdown-Liste siehst.


Tipps für Profis

  • Verwende Option Explicit: Das Hinzufügen von Option Explicit am Anfang deiner Module hilft, Fehler durch nicht deklarierte Variablen zu vermeiden.
  • Debugging: Setze Haltepunkte im Code, um den Ablauf zu überprüfen und festzustellen, wo Fehler auftreten.
  • Daten validieren: Vor dem Hinzufügen von Einträgen in die Listbox kannst du auch eine Datenvalidierung durchführen, um sicherzustellen, dass die Daten den gewünschten Anforderungen entsprechen.

FAQ: Häufige Fragen

1. Wie kann ich den Code anpassen, um mehr Spalten zu berücksichtigen?
Du kannst die Schleife anpassen, um durch mehrere Spalten zu iterieren, indem du die Cells(iRow, x)-Referenz für verschiedene Spalten verwendest.

2. Funktioniert dieser Code auch in Excel Online?
Leider nicht. VBA wird nicht in Excel Online unterstützt. Du musst Excel Desktop verwenden, um diesen Code auszuführen.

3. Was ist der Unterschied zwischen Collection und Dictionary?
Eine Collection erlaubt doppelte Schlüssel, während ein Dictionary nur eindeutige Schlüssel zulässt, was es ideal für das Verhindern doppelter Einträge macht.

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