Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Mehrere Zeilen in Listbox mit Rowsource

Forumthread: Mehrere Zeilen in Listbox mit Rowsource

Mehrere Zeilen in Listbox mit Rowsource
31.08.2018 09:59:44
Felix
Hallo VBA-Experten,
meine Ausgangssituation ist folgende:
Ich habe eine Tabelle mit 24 Spalten. Die Zeilen sollen fortlaufend beschrieben werden.
Ich möchte nun ein UserForm mit einer Listbox aufrufen, in der ich nach einer bestimmten Nummer (in Spalte E) suche und mir dann alle Zeilen, die diese Nummer enthalten ausgeben lassen. Es sollen auch alle 24 Spalten ausgegeben werden, wodurch die .AddItem Funktion ja wegfällt.
Das UserForm besteht nur aus der Listbox und einem Button, der die Suchprozedur auslösen soll.
Mein Versuch mit Rowsource:
Private Sub CommandButton1_Click()
Dim rngCell As Range
Dim strFirstAddress As String
With Worksheets("Tabelle1").Range("E:E")
Me.ListBox1.Clear
Set rngCell = .Find(Me.TextBox1.Value, LookIn:=xlValues, lookat:=xlWhole)
If Not rngCell Is Nothing Then
strFirstAddress = rngCell.Address
Do
With Me.ListBox1
'.ColumnHeads = True
.ColumnWidths = "1,7cm;2cm;0,5cm"
.ColumnCount = Tabelle1.Range("A1:X1").Columns.Count
.RowSource = Tabelle1.Range(Cells(rngCell.Row, 1), Cells(rngCell.Row, 24)).Address
End With
Set rngCell = .FindNext(rngCell)
Loop While Not rngCell Is Nothing And rngCell.Address  strFirstAddress
Else
MsgBox "Nicht gefunden", 48
End If
End With
End Sub
Er findet so leider immer nur die letzte Zeile mit der gesuchten Nummer. Meine Überlegung war jetzt, im Loop ein Array zu befüllen, welches nach dem Verlassen des Loops dann irgendwie .rowsource bedient, so dass alle gesuchten Zeilen in der Listbox sichtbar werden. Leider habe ich keine Ahnung, wie ich das Umsetzen kann. Bin auch gerne für andere Lösungen offen, die mich zum Ziel bringen.
Viele Grüße
Felix
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mehrere Zeilen in Listbox mit Rowsource
31.08.2018 10:14:58
Daniel
Hi
AddItem geht bei 24 Spalten nicht, aber RemoveItem
Dh du schreibst alle Werte in die Listbox:
Listbox1.List = Range("A1:X999").Value

Dann läufst du mit einer Schleife rückwärts durch die Listbox und löschst die nicht benötigten Zeilen
For i = Listbox1.ListCount - 1 to 0 Step -1
If listbox1.list(i, 4)  Textbox1.Text then Listbox1.RemoveItem i
Next
Gruß Daniel
Anzeige
AW: Mehrere Zeilen in Listbox mit Rowsource
31.08.2018 10:37:02
Felix
Hallo Daniel,
danke für deinen Beitrag. Ich hab deinen Code eingebaut, jedoch gibt er mir nur Spalte A in der Listbox aus und ich glaube, dass der Rechenaufwand für erst Reinladen und dann einzeln Rausschmeißen doch sehr groß ist.
Später soll die Quelltabelle aus einer anderen Datei kommen und soll täglich ca. 80 neue Zeilen dazubekommen. Mit jährlicher Reinigung wären dies ca. 25000 Einträge pro Jahr.
Viele Grüße
Felix
Anzeige
AW: Mehrere Zeilen in Listbox mit Rowsource
31.08.2018 12:50:20
Daniel
hi
naja, mein Code ist ja nur rudimentär, dh das anpassen an die Anzahl der Spalten und -breiten musst du natürlich noch selber hinzufügen.
bei größeren Datenmengen könntest du auch so vorgehen:
1. Haupttabelle nach der Kritieriumsspalte sortieren, so dass alle anzuzeigenden Werte direkt untereinander stehen
2. suche die erste Zeile mit dem Suchbegriff(z.b. FIND)
3. suche die letzte Zeile mit dem Suchbegriff (z.B. FIND mit Searchdirection:=xlprevious)
4. übernehme alle dazwischenliegenden Zeilen in die Listbox. Da die anzuzeigenden Zeilen einen lückenlosen Block bilden, kannst du das dann auch wieder über die RowSource erledigen.
Gruß Daniel
Anzeige
;
Anzeige

Infobox / Tutorial

Mehrere Zeilen in Listbox mit Rowsource


Schritt-für-Schritt-Anleitung

Um mehrere Zeilen in einer Listbox anzuzeigen, die mit einer Rowsource gefüllt werden, kannst du den folgenden VBA-Code nutzen. Dieser Ansatz ermöglicht es dir, alle relevanten Zeilen anzuzeigen, die eine bestimmte Nummer in Spalte E enthalten:

  1. Füge ein UserForm in deinem Excel-Projekt hinzu und platziere eine Listbox (ListBox1) und ein Textfeld (TextBox1) sowie einen Button (CommandButton1) auf dem UserForm.
  2. Füge den folgenden VBA-Code in das Codefenster des UserForms ein:
Private Sub CommandButton1_Click()
    Dim rngCell As Range
    Dim strFirstAddress As String
    Dim ws As Worksheet
    Set ws = Worksheets("Tabelle1")

    Me.ListBox1.Clear
    With ws.Range("E:E")
        Set rngCell = .Find(Me.TextBox1.Value, LookIn:=xlValues, lookat:=xlWhole)
        If Not rngCell Is Nothing Then
            strFirstAddress = rngCell.Address
            Do
                Me.ListBox1.AddItem
                For i = 1 To 24
                    Me.ListBox1.List(Me.ListBox1.ListCount - 1, i - 1) = ws.Cells(rngCell.Row, i).Value
                Next i
                Set rngCell = .FindNext(rngCell)
            Loop While Not rngCell Is Nothing And rngCell.Address <> strFirstAddress
        Else
            MsgBox "Nicht gefunden", 48
        End If
    End With
End Sub
  1. Teste das UserForm, indem du eine Nummer in das Textfeld eingibst und auf den Button klickst. Alle Zeilen, die die gesuchte Nummer in Spalte E enthalten, sollten in der Listbox angezeigt werden.

Häufige Fehler und Lösungen

  • Nur die letzte Zeile wird angezeigt: Wenn du nur die letzte Zeile mit der gesuchten Nummer siehst, stelle sicher, dass du die .AddItem Methode korrekt verwendest, um jede Zeile hinzuzufügen.

  • Fehlende Spalten: Wenn nur Spalte A angezeigt wird, überprüfe, ob du die Schleife zum Übertragen der Werte aus jeder Zeile korrekt implementiert hast.


Alternative Methoden

Eine alternative Methode besteht darin, die Daten vorab in die Listbox zu laden und dann unerwünschte Zeilen zu entfernen. Hierbei kannst du den folgenden Code verwenden:

Listbox1.List = Range("A1:X999").Value

For i = Listbox1.ListCount - 1 To 0 Step -1
    If Listbox1.List(i, 4) <> Textbox1.Text Then Listbox1.RemoveItem i
Next

Diese Methode kann jedoch ineffizient sein, insbesondere bei großen Datenmengen. Daher ist die erste Methode mit .Find und .AddItem in der Regel vorzuziehen.


Praktische Beispiele

Hier ist ein praktisches Beispiel, wie du die oben genannten Methoden anwenden kannst:

  • Datenstruktur: Stelle sicher, dass deine Daten in "Tabelle1" strukturiert sind und dass die gesuchte Nummer in Spalte E steht.
  • Suchbegriff: Wenn du nach "12345" suchst, gib diesen Wert in das Textfeld ein und klicke auf den Button. Alle Zeilen mit dieser Nummer erscheinen in der Listbox.

Tipps für Profis

  • Optimierung: Bei großen Datenmengen ist es sinnvoll, die Tabelle vor der Suche nach dem Suchbegriff zu sortieren. So kannst du die Suche effizienter gestalten.
  • Verwendung von Arrays: Du kannst auch ein Array verwenden, um die gefundenen Zeilen zwischenzuspeichern und dann die Listbox auf einmal zu füllen. Dies kann die Performance erheblich verbessern.

FAQ: Häufige Fragen

1. Frage
Kann ich die Listbox auch ohne VBA füllen?
Nein, für eine dynamische Anzeige der Daten in einer Listbox ist VBA erforderlich.

2. Frage
Wie viele Zeilen kann ich maximal in der Listbox anzeigen?
Die Anzahl der anzuzeigenden Zeilen ist theoretisch unbegrenzt, aber die Performance kann bei sehr großen Datenmengen beeinträchtigt werden.

3. Frage
Kann ich die Spaltenbreite der Listbox anpassen?
Ja, du kannst die Spaltenbreite mit der Eigenschaft .ColumnWidths in deinem VBA-Code anpassen.

Mit diesen Informationen solltest du in der Lage sein, mehrere Zeilen in einer Listbox mit Rowsource effektiv anzuzeigen und zu verwalten.

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