Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA: Listbox nach Kriterien füllen
#1
Guten Tag Zusammen,

ich habe folgendes Problem:

Ich habe eine Listbox in einer Userform. Die soll nach bestimmten Kriterien die Werte aus einer Tabelle wiedergeben.
Kriterien:
Min: 180 kg
Max: 1000 kg
 
 
Tabelle:
 
Hersteller               Typ                      min. 0,63                max. 0,63 
Noviak                  50 x 50                 150                         1750          <-kg
Noviak                  70 x 70                 150                         2900          <-kg
Noviak                  90 x 90                 150                         5000          <-kg
Noviak                  120 x 120             220                         5400          <-kg
Noviak                  110 x 150             220                         6250          <-kg
Noviak                  150 x 140             900                         9550          <-kg
Marchios               50 x 50                 175                         1400          <-kg
Marchios               70 x 70                 175                         2350          <-kg
Marchios               90 x 90                 175                         4750          <-kg
 

Mein Lösungsansatz ist folgender, um die Daten erstmals auszufiltern,   aber der ist auch Fehler behaftet:
 
Code:
such1 = Worksheets("Tabelle1").Range("F13") 'such Wort
such2 = Worksheets("Tabelle1").Range("F15")
'letzteZ = Worksheets("Tabellen").Range("D100").End(xlUp).Row
 
 
For i = 4 To 100
 If Worksheets("Tabellen").Cells(i, 4) <= such1 And Worksheets("Tabellen").Cells(i, 5) >= such2 Then
        Worksheets("Tabellen").Cells(i, 4).Select
        'Selection.Interior.Color = 255 'rot
        'ListBox1.AddItem = Cells(i, 3).Value
        'ListBox1.AddItem = Cells(i, 2).Value
End If
Next

 

Ich habe natürlich eine Bespieldatei angehängt. In der Datei gibt es noch ein Kriterium nach der Geschwindigkeit, aber ich denke wenn ich  die Lösungen zum obigen Problem habe, dass ich das dann mit einer simplen If-Bedingung hinbekomme.
 
Vielen Dank im Voraus!
 
Gruß Joe


Angehängte Dateien
.xlsm   Liste_Kriterien.xlsm (Größe: 28,94 KB / Downloads: 16)
Antworten Top
#2
Also mittlerweile bin ich soweit, das ein Wert in der Listbox angezeigt wird, aber leider nur der letzte der nach den Kriterien gefordert wurde.


Code:
such1 = Worksheets("Tabelle1").Range("F13") 'such Wort
such2 = Worksheets("Tabelle1").Range("F15") 'such Wort
letzteZ = Worksheets("Tabellen").Range("D100").End(xlUp).Row
letztea = Worksheets("Tabellen").Range("E100").End(xlUp).Row
Set wks = Worksheets("Tabellen")


With ListBox1
    .ColumnCount = 2
    .ColumnWidths = "50;50"
    .ColumnHeads = False
End With


For i = 4 To letzteZ
 If Worksheets("Tabellen").Cells(i, 4) <= such1 Then
For a = 4 To letztea
 If Worksheets("Tabellen").Cells(a, 5) <= such2 Then
        Worksheets("Tabellen").Cells(a, 4).Interior.Color = 255
        Worksheets("Tabellen").Cells(a, 5).Interior.Color = 255
        
        ListBox1.AddItem
        ListBox1.List(Z, 0) = Cells(a, 2).Value
        ListBox1.List(Z, 1) = wks.Cells(a, 3).Value

End If
Next
End If
Next

Hat jemand Rat wie ich alle gesuchten Werte in die Listbox bekomme?

Gruß Joe
Antworten Top
#3
Hallo Joe,

Code:
       ListBox1.AddItem
       ListBox1.List(ListBox1.List.Count - 1, 0) = wks.Cells(a, 2).Value
       ListBox1.List(ListBox1.List.Count - 1, 1) = wks.Cells(a, 3).Value

Gruß Uwe
Antworten Top
#4
Hallo Uwe,

Danke für deine Lösung, aber bei mir kommt ein Laufzeitfehler 424, Objekt erforderlich.

So sieht jetzt der komplette Code aus, vielleicht hab ich was übersehen.


Code:
such1 = Worksheets("Tabelle1").Range("F13") 'such Wort
such2 = Worksheets("Tabelle1").Range("F15") 'such Wort
letzteZ = Worksheets("Tabellen").Range("D100").End(xlUp).Row
letztea = Worksheets("Tabellen").Range("E100").End(xlUp).Row
Set wks = Worksheets("Tabellen")


With ListBox1
    .ColumnCount = 2
    .ColumnWidths = "100;100"
    .ColumnHeads = False
End With


For i = 4 To letzteZ
 If Worksheets("Tabellen").Cells(i, 4) <= such1 Then
For a = 4 To letztea
 If Worksheets("Tabellen").Cells(a, 5) >= such2 Then
        'Worksheets("Tabellen").Cells(a, 4).Interior.Color = 255
        'Worksheets("Tabellen").Cells(a, 5).Interior.Color = 255
        'ListBox1.List(Z, 0) = wks.Cells(a, 2).Value 'Hersteller
        'ListBox1.List(Z, 1) = wks.Cells(a, 3).Value 'Typ
        
        ListBox1.AddItem
        ListBox1.List(ListBox1.List.Count - 1, 0) = wks.Cells(a, 2).Value
        ListBox1.List(ListBox1.List.Count - 1, 1) = wks.Cells(a, 3).Value
End If
Next
End If
Next

Gruß Joe


Angehängte Dateien
.xlsm   Liste_Kriterien.xlsm (Größe: 34,67 KB / Downloads: 12)
Antworten Top
#5
Hallo Joe,

Sorry, da waren die Punkte zuviel. Richtig so:

Code:
           ListBox1.AddItem
           ListBox1.List(ListBox1.ListCount - 1, 0) = wks.Cells(a, 2).Value
           ListBox1.List(ListBox1.ListCount - 1, 1) = wks.Cells(a, 3).Value

Gruß Uwe
Antworten Top
#6
So geht das:

Code:
Private Sub UserForm_Initialize()
    ListBox1.List = Tabelle2.Cells(4, 2).CurrentRegion.Value

    For j = ListBox1.ListCount - 1 To 0 Step -1
       If ListBox1.List(j, 2) < 150 Or ListBox1.List(j, 3) > 5000 Then ListBox1.RemoveItem j
    Next
End Sub
Antworten Top
#7
Hallo Uwe,

Danke jetzt funktioniert es, aber großes Manko ist, das wenn man 5 Ergebnisse hat er die 5 Ergebnisse komplett 5 mal darstellt. Also 25 Ergebnisse anstatt 5.

Kennst da noch eine Lösung für, da ich gar kein Ansatz für habe.

Hallo snb,

dein Code zeigt nur ein Wert an, aber suche ja nach Kriterien. Trotzdem Danke für deine Mühe.

Gruß Joe
Antworten Top
#8
Hallo Joe,

ich blicke da nicht so richtig durch, was Du eigentlich genau machen willst.
Du solltest das hier unbedingt mal in Ruhe durcharbeiten und versuchen, konsequent umzusetzen:
Option Explicit, Intellisense und Techniken des Schreibens
Benutze gesetzte Variablen konsequent im weiteren Code. Das vermeidet Fehler, macht den Code schneller und auch besser durchschaubarer. Wink

Gruß Uwe
Antworten Top
#9
Hallo Uwe,

Sorry wenn ich unverständlich bin, manchmal seh ich den Wald vor lauter Bäume nicht.


z.B. Kriterium1: 200     [kg]
       Kriterium2: 1000   [kg]


Tabelle:
 
         B                         C                            D                                   E
4.   Hersteller               Typ                      min. Gewicht                max.  Gewicht
5.   Noviak                  50 x 50                 150                         1750          
6.   Noviak                  70 x 70                 150                         2900         
7.   Noviak                  90 x 90                 150                         5000         
8.   Noviak                  120 x 120             220                         5400         
9.   Noviak                  110 x 150             220                         6250         
10. Noviak                  150 x 140             900                         9550         
11. Marchios               50 x 50                 175                         1400         
12. Marchios               70 x 70                 175                         2350         
13. Marchios               90 x 90                 175                         4750  

Kriterium1 darf die Spalte min. Gewicht nicht unterschreiten und Kriterium2 darf die Spalte max.Gewicht nicht überschreiten, somit bleibt eine gewisse Auswahl übrig die in der Liste angezeigt werden soll.

Hier mein Code und die Datei. Ich hab versucht alles zu verschöneren (z.B. Option Explicit).
Bin dir sehr Dankbar wenn du mir nochmal helfen kannst.


Code:
Option Explicit
Dim Kriterium1 As Range
Dim Kriterium2 As Range
Dim letzteZeileD As Range
Dim letzteZeileE As Range
Dim wks As Worksheet
Dim i As Byte
Dim a As Byte


Private Sub cmdSuchen_Click()

Kriterium1 = Worksheets("Tabelle1").Range("F13") 'minimal Wert
Kriterium2 = Worksheets("Tabelle1").Range("F15") 'maximal Wert
letzteZeileD = Worksheets("Tabellen").Range("D100").End(xlUp).Row 'gibt die letzte Zeile wieder die nicht leer ist
letzteZeileE = Worksheets("Tabellen").Range("E100").End(xlUp).Row 'gibt die letzte Zeile wieder die nicht leer ist
Set wks = Worksheets("Tabellen")



With ListBox1
    .ColumnCount = 2
    .ColumnWidths = "100;100"
    .ColumnHeads = False
End With

'Leert die ListBox
ListBox1.Clear

For i = 4 To letzteZeileD
 If Worksheets("Tabellen").Cells(i, 4) <= Kriterium1 Then
For a = 4 To letzteZeileE
 If Worksheets("Tabellen").Cells(a, 5) >= Kriterium2 Then
 
 'Färbt die Zellen die nach den Kriterien passen zur Überprüfung des Codes
        Worksheets("Tabellen").Cells(a, 4).Interior.Color = 255
        Worksheets("Tabellen").Cells(a, 5).Interior.Color = 255
 
 'Die Liste wird durch die Werte gefüllt die nach den Kriterien passen
 
        ListBox1.AddItem
        ListBox1.List(ListBox1.ListCount - 1, 0) = wks.Cells(a, 2).Value
        ListBox1.List(ListBox1.ListCount - 1, 1) = wks.Cells(a, 3).Value

End If
Next
End If
Next


End Sub


Gruß Joe
Antworten Top
#10
Nachtrag: Tabelle beginnt natürlich bei drei!

Tabelle:
 
         B (Spalte 2)           C (Spalte 3)          D (Spalte 4)              E (Spalte 5)
3.   Hersteller               Typ                      min. Gewicht       max.  Gewicht
4.   Noviak                  50 x 50                 150                         1750          
5.   Noviak                  70 x 70                 150                         2900         
6.   Noviak                  90 x 90                 150                         5000         
7.   Noviak                  120 x 120             220                         5400         
8.   Noviak                  110 x 150             220                         6250         
9.   Noviak                  150 x 140             900                         9550         
10. Marchios               50 x 50                 175                         1400         
11. Marchios               70 x 70                 175                         2350         
12. Marchios               90 x 90                 175                         4750
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste