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

Forumthread: Listbox füllen ohne Duplikaten und leerzelle

Listbox füllen ohne Duplikaten und leerzelle
18.11.2007 14:33:53
Karel
Hallo Forum,
Habe unterstehende makro in Forum gefunden, und ein bisschen angepasst, brauche nur Suche in Spalte C
(genau bereich C3:C5000)
wie kann ich diese listbox füllen ohne Duplikate und leerzellen beispiel https://www.herber.de/bbs/user/47837.xls

Private Sub TextBox1_Change()
Dim arr() As Variant
Dim index As Integer
Dim iCount As Integer
Dim X As Long
X = Sheets("Tabelle1").Cells(Rows.Count, "C").End(xlUp).Row
If TextBox1.Value = "" Then
ListBox1.RowSource = "C3:C" & X
Exit Sub
End If
ListBox1.RowSource = ""
ListBox1.Clear
iCount = 0
For index = 3 To X
If LCase(Left(Cells(index, 3), Len(TextBox1))) = LCase(TextBox1) Then
If Sheets("Tabelle1").Cells(index, 3)  "" Then
On Error Resume Next
ReDim Preserve arr(1, iCount)
arr(0, iCount) = Cells(index, 3).Value
'arr(1, iCount) = Cells(index, 4).Value
'arr(2, iCount) = Cells(index, 5).Value
iCount = iCount + 1
End If
End If
Next
ListBox1.Column = arr
End Sub


Grusse
Karel

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Listbox füllen ohne Duplikaten und leerzelle
18.11.2007 17:01:35
Gerd
Hallo Karel,
setze bitte im Eigenschaften-Fenster bei der Listbox1 ColumnCount auf "1" .

Private Sub TextBox1_Change()
Dim var As Variant, arr() As Variant, arr2() As Variant
Dim index As Long, iCount As Long, X As Long
X = Sheets("Tabelle1").Cells(Rows.Count, "C").End(xlUp).Row
var = Sheets("Tabelle1").Range("C3:C" & X).SpecialCells(xlCellTypeConstants)
ReDim arr(0)
arr(0) = "#"
For iCount = 1 To UBound(var)
If Not IsNumeric(Application.Match(var(iCount, 1), arr, 0)) Then
ReDim Preserve arr(IIf(arr(0) = "#", 0, UBound(arr) + 1))
arr(UBound(arr)) = var(iCount, 1)
End If
Next
ListBox1.Clear
If TextBox1.Value = "" Then
ListBox1.List = arr
Exit Sub
End If
iCount = 0
ReDim arr2(0)
arr2(0) = " "
For index = 0 To UBound(arr)
If LCase(Left(arr(index), Len(TextBox1))) = LCase(TextBox1) Then
ReDim Preserve arr2(iCount)
arr2(iCount) = arr(index)
iCount = iCount + 1
End If
Next
ListBox1.List = arr2
End Sub


Gruß Gerd

Anzeige
AW: Listbox füllen ohne Duplikaten und leerzelle
18.11.2007 22:38:00
Karel
Hallo Gerd,
Benutzen deine variante, ihr liefert kein Fehler bei eingabe in suchfeld (bei unbekannte werten)
habe noch eine Fragen, wie kan man beim öffnen von Userform, die Listbox direkt fullen und sortiert anzeigen.
Sortier makro hab ich und Funktioniert auch wenn ich im Textfeld buchstabe eingeben.

Private Sub TextBox1_Change()
Dim var As Variant, arr() As Variant, arr2() As Variant
Dim index As Long, iCount As Long, X As Long
X = Sheets("Tabelle1").Cells(Rows.Count, "C").End(xlUp).Row
var = Sheets("Tabelle1").Range("C8:C" & X).SpecialCells(xlCellTypeConstants)
ReDim arr(0)
arr(0) = "#"
For iCount = 1 To UBound(var)
If Not IsNumeric(Application.Match(var(iCount, 1), arr, 0)) Then
ReDim Preserve arr(IIf(arr(0) = "#", 0, UBound(arr) + 1))
arr(UBound(arr)) = var(iCount, 1)
End If
Next
ListBox1.Clear
If TextBox1.Value = "" Then
ListBox1.List = arr
Exit Sub
End If
iCount = 0
ReDim arr2(0)
arr2(0) = " "
For index = 0 To UBound(arr)
If LCase(Left(arr(index), Len(TextBox1))) = LCase(TextBox1) Then
ReDim Preserve arr2(iCount)
arr2(iCount) = arr(index)
iCount = iCount + 1
End If
Next
ListBox1.List = arr2
Call Sortieren
End Sub


_______________________________________________________________
Sub Sortieren()
Dim Letzter As Integer, Naechster As Integer
Dim i As String
With ListBox1
For Letzter = 0 To .ListCount - 1
For Naechster = Letzter + 1 To .ListCount - 1
If .List(Letzter) > .List(Naechster) Then
i = .List(Letzter)
.List(Letzter) = .List(Naechster)
.List(Naechster) = i
End If
Next Naechster
Next Letzter
End With
End Sub


und kannst du mir diese anschnitt erlautern
For iCount = 1 To UBound(var)
If Not IsNumeric(Application.Match(var(iCount, 1), arr, 0)) Then
ReDim Preserve arr(IIf(arr(0) = "#", 0, UBound(arr) + 1))
arr(UBound(arr)) = var(iCount, 1)
Grusse
Karel

Anzeige
AW: erledigt
21.11.2007 20:01:00
Karel
erledigt
Karel
;

Forumthreads zu verwandten Themen

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

Listbox füllen ohne Duplikate und Leerzellen


Schritt-für-Schritt-Anleitung

Um eine Listbox in Excel mit Werten aus einer bestimmten Spalte zu füllen, ohne Duplikate und Leerzellen anzuzeigen, kannst du den folgenden VBA-Code nutzen. Dieser Code wird im TextBox1_Change-Ereignis deiner Userform platziert.

Private Sub TextBox1_Change()
    Dim var As Variant, arr() As Variant, arr2() As Variant
    Dim index As Long, iCount As Long, X As Long
    X = Sheets("Tabelle1").Cells(Rows.Count, "C").End(xlUp).Row
    var = Sheets("Tabelle1").Range("C3:C" & X).SpecialCells(xlCellTypeConstants)
    ReDim arr(0)
    arr(0) = "#"

    For iCount = 1 To UBound(var)
        If Not IsNumeric(Application.Match(var(iCount, 1), arr, 0)) Then
            ReDim Preserve arr(IIf(arr(0) = "#", 0, UBound(arr) + 1))
            arr(UBound(arr)) = var(iCount, 1)
        End If
    Next

    ListBox1.Clear
    If TextBox1.Value = "" Then
        ListBox1.List = arr
        Exit Sub
    End If

    iCount = 0
    ReDim arr2(0)
    arr2(0) = " "

    For index = 0 To UBound(arr)
        If LCase(Left(arr(index), Len(TextBox1))) = LCase(TextBox1) Then
            ReDim Preserve arr2(iCount)
            arr2(iCount) = arr(index)
            iCount = iCount + 1
        End If
    Next

    ListBox1.List = arr2
End Sub

Häufige Fehler und Lösungen

  1. Leere Listbox nach Eingabe
    Lösung: Stelle sicher, dass der Bereich C3:C5000 tatsächlich Werte enthält und dass keine Leerzellen im Bereich sind. Wenn TextBox1 leer ist, wird die Liste aus arr gefüllt.

  2. Duplikate werden angezeigt
    Lösung: Achte darauf, dass die Bedingung If Not IsNumeric(Application.Match(...)) korrekt implementiert ist, um Duplikate zu vermeiden.


Alternative Methoden

Eine andere Möglichkeit, eine Listbox zu füllen, besteht darin, die Werte direkt über SQL-Abfragen abzurufen, wenn du mit einer Datenbank verbunden bist.

Sub FillListBoxFromDatabase()
    ' Beispielcode für den Zugriff auf eine Datenbank
End Sub

Diese Methode eignet sich besonders, wenn du mit großen Datenmengen arbeitest und die Performance verbessern möchtest.


Praktische Beispiele

Angenommen, du hast eine Userform mit einer Textbox und einer Listbox. Die Textbox wird verwendet, um nach bestimmten Werten in der Spalte C zu filtern. Das oben genannte Makro wird dazu verwendet, die Listbox zu füllen.

  1. Userform erstellen: Füge eine Userform mit einer Textbox (TextBox1) und einer Listbox (ListBox1) hinzu.
  2. Code einfügen: Platziere den VBA-Code im Code-Modul der Userform.
  3. Testen: Führe die Userform aus und teste die Filterfunktion.

Tipps für Profis

  • Sortierung: Füge eine Sortierfunktion hinzu, die die Listbox beim Laden der Userform automatisch sortiert.
  • Fehlerbehandlung: Implementiere eine robuste Fehlerbehandlung für unerwartete Eingaben in TextBox1.
  • Optimierung: Überlege, ob du die Listbox erst nach einer kurzen Verzögerung aktualisieren willst, um die Performance zu steigern, wenn der Benutzer schnell tippt.

FAQ: Häufige Fragen

1. Wie kann ich die Listbox beim Öffnen der Userform automatisch füllen?
Du kannst den Code zur Füllung der Listbox in das UserForm_Initialize-Ereignis einfügen.

2. Was mache ich, wenn mein Code nicht funktioniert?
Überprüfe, ob alle Referenzen korrekt gesetzt sind und ob der Bereich, den du abfragst, tatsächlich Werte enthält. Debugge den Code, um herauszufinden, wo das Problem liegt.

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