HERBERS
Excel-Forum
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Entdecke rund 2 Millionen Excel-Lösungen im
Forumsarchiv
Forumbeitrag
Excel-Version des Fragestellers:
2016
Erfahrungslevel des Fragestellers:
Excel-Profi - VBA gut
snb
04.06.2026 10:18:31
AW: Gefiltertes Array in Listbox einlesen
Oder so:
Sub M_snb()

With Sheets("Rohdaten").Cells(1).CurrentRegion
.AutoFilter 1, Label1380.Caption
.AutoFilter 4, Label450.Caption
.Copy .Parent.Cells(1, 60)
Listbox1.List = .Parent.Cells(1, 60).CurrentRegion
.Parent.Cells(1, 60).CurrentRegion.ClearContents
End With

With Listbox1
.ColumnCount = 21
.ColumnWidths = "0;0;0;0;0;0100;150;0;0;0;0;0;0;0;0;0;0;0;0;30"
End With
End Sub

Als Antwort auf diesen Beitrag
Chris
03.06.2026 13:10:17
Gefiltertes Array in Listbox einlesen
Liebes Forum,

der untenstehendem Code

- liest einen variablen Range in ein Array ein.
- filtert das Array anhand zweier Kriterien (Captions aus zwei Labels).
- Das gefilterte Array wird dann in einer mehrspaltigen Listbox (SingleSelect) übergeben, so das dort die gefilterten Werte ausgewählt werden können.

Der Code tut soweit das, was er soll...aber:

Der Range, welcher in ein Array kopiert wird hat derzeit - vor der Filterung - 24 Zeilen.
Zwar werden in der Listbox die gefilterten Einträge aufgelistet (Bspw. 3 aus 24), jedoch werden dann 21 leere Einträge (24-3) mitübernommen. Dies
ist daran zu erkennen, dass per Mausklick oder Pfeiltaste auch leere Einträge ausgewählt bzw. markiert werden können.

Was muss geändert werden, damit nur die entsprechenden Anzahl an gefilterten Elementen Teil der Listbox wird, so dass leere Einträge nicht in der Listbox übernommen werden?



Sub FillListbox1()

Dim ws As Worksheet
Dim arrQuell As Variant, arrFilter() As Variant
Dim letzteZeile As Long, i As Long, j As Long, treffer As Long
Dim krit1 As String, krit2 As String

Dim iC As Long
Dim Counter As Long


Set ws = ThisWorkbook.Sheets("Rohdaten")

krit1 = ORDER.Label1380.Caption 'Jahr
krit2 = ORDER.Label450.Caption 'KW


letzteZeile = ws.Cells(ws.Rows.count, "A").End(xlUp).Row

' Daten von Spalte A bis U (Spalte 1 bis 21) in ein Array einlesen
arrQuell = ws.Range("A2:U" & letzteZeile).Value


ReDim arrFilter(1 To UBound(arrQuell, 1), 1 To UBound(arrQuell, 2))
treffer = 0

' 1. Schritt: Daten filtern (Spalte A = 1, Spalte D = 4)
For i = 1 To UBound(arrQuell, 1)
If arrQuell(i, 1) = krit1 And arrQuell(i, 4) = krit2 Then
treffer = treffer + 1
arrFilter(treffer, 1) = arrQuell(i, 7) ' Spalte G
arrFilter(treffer, 2) = arrQuell(i, 8) ' Spalte H
arrFilter(treffer, 3) = "(" & arrQuell(i, 21) & ")" ' Spalte U
End If
Next i

' Array auf die tatsächliche Trefferanzahl verkleinern
ReDim Preserve arrFilter(1 To UBound(arrFilter, 1), 1 To UBound(arrQuell, 2))


' 3. Schritt: Daten in die ListBox ausgeben
With ORDER.ListBox1
.Clear ' Vorherige Einträge löschen
.ColumnCount = 3 ' 3 Spalten festlegen
.ColumnWidths = "0;150;30"
.List = arrFilter ' Das Array direkt zuweisen
End With
end sub



Folgenachrichten
Antwort auf Beitrag erstellen
Bitte einen Anwendernamen ohne @ eingeben.
Bitte das Passwort eingeben.
Bitte eine gültige E-Mail-Adresse eingeben.
Bitte einen Betreff eingeben.
Weitere Optionen
Aktivieren, wenn die Frage/der Beitrag noch nicht beantwortet wurde und unter Listen > Offene Threads erscheinen soll.
Beispieldatei hochladen

Bitte einen Nachrichtentext eingeben.