Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1532to1536
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Listbox filtern "größer/kleiner als" und Bereich

Listbox filtern "größer/kleiner als" und Bereich
03.01.2017 17:37:46
Matthias
Hallo, ich habe eine Userfom mit einer Listbox und Filterfunktion. Die ComboBoxen enthalten die Werte vom Tabellenblatt. Ich habe nun 2 Probleme die ich nicht lösen kann:
1. Spalte C soll je nach Wahl des ToggleButtons "kleiner als" oder "größer als" gefiltert werden. In der ComboBox soll dann der jeweilige Wert angegeben werden d.h. wenn ToggleButton "kleiner als" und ComboBox "500" ist, sollen nur die Werte unter 500 angezeigt werden.
2. In Spalte D sind Beträge. Es sollen nur die Beträge angezeigt werden, welche zwischen den entsprechenden ComboBoxen eingetragen werden d.h. wenn ComboBox1 "100" und ComboBox2 "300" dann sollen nur die Werte zwischen 100 und 300 angezeigt werden.
Ich hoffe ich habe mir klar ausgedrückt und Ihr könnt mir helfen :) Vielen Dank
https://www.herber.de/bbs/user/110313.xlsm

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listbox filtern "größer/kleiner als" und Bereich
03.01.2017 18:43:41
Daniel
Hi
da wirst du das ganze etwas umschreiben müssen.
die Wertevergleiche mit größer und kleiner sind mit dem Textvergleich LIKE nicht möglich.
du müsstest deine Prüfung nach diesem Schema aufbauen und eben unterschiedlich prüfen, je nach dem ob du einen Textinhalt vergleichen willst (cont1-cont2) oder einen Zahlenwert (cont3-Cont5)
Dim F As Long
Dim I As Long
F = IIf(ToggleButton1.Value, 1, -1)
For I = 2 To Tabelle1.Cells(Rows.Count, 1).End(xlUp).Row
If Tabelle1.Cells(I, 1) = Cont1.Text Or Cont1.ListIndex = -1 Then
If Tabelle1.Cells(I, 2) = Cont2.Text Or Cont2.ListIndex = -1 Then
If F * Tabelle1.Cells(I, 3) >= F * Val(Cont3.Text) Or Cont3.ListIndex = -1 Then
If Tabelle1.Cells(I, 4) >= Val(Cont4.Text) Or Cont4.ListIndex = -1 Then
If Tabelle1.Cells(I, 4) 
das Or Cont1.ListIndex = -1 jeweils am Ende der Prüfung sorgt dafür, dass das Ergebnis immer WAHR ergibt, wenn für die Combobox nichts ausgewält wurde.
das Umschalten für Cont3 (größer oder kleiner) habe ich so gelöst, ich immer mit größer prüfe, aber die Zahlenwerte mit -1 multipliziere, wenn kleiner gefordert ist (zumindest dem Prinzip nach, da musst du nochmal genauer testen, wie du es haben willst
ansonsten musst du beachten, das in der Combobox immer Texte stehen, die erst in Zahlen gewandelt werden müssen (VAL), wenn sie mit Zellwerten verglichen werden.
Gruß Daniel
Anzeige
AW: Listbox filtern "größer/kleiner als" und Bereich
04.01.2017 17:38:04
Matthias
Vielen Dank für die schnelle Hilfestellung, jedoch habe ich Probleme mit dem Umstellen. Wie mü _ sste der Code nun vollständig aussehen?

Public chk As Boolean
Sub checkit()
Dim ar(5) As Variant, objMyDic As Object, I As Long, F As Long, tempStr1 As String, tempStr2  _
As String, tempStr3 As String, IntC As Integer, row_ As Integer
Dim ArCol(4)
ArCol(0) = 1
ArCol(1) = 2
ArCol(2) = 3
ArCol(3) = 4
ArCol(4) = 4
Set objMyDic = CreateObject("Scripting.Dictionary")
If chk = True Then
ContListfeld.Clear
For I = 1 To 5
If Controls("Cont" & I).Value = "" Then ar(I - 1) = "*" Else ar(I - 1) = Controls("Cont" & I) _
.Value
tempStr1 = tempStr1 & ar(I - 1) & "/"
Controls("Cont" & I).Clear
Controls("Cont" & I) = IIf(ar(I - 1) = "*", "", ar(I - 1))
Next
For IntC = 1 To 5
For I = 2 To Tabelle1.Cells(Rows.Count, 1).End(xlUp).Row
tempStr2 = Tabelle1.Cells(I, "A") & "/" & Tabelle1.Cells(I, "B") & "/" & Tabelle1.Cells(I, " _
C") & "/" & Tabelle1.Cells(I, "D") & "/" & Tabelle1.Cells(I, "D") & "/"
If Tabelle1.Cells(I, 1) = Cont1.Text Or Cont1.ListIndex = -1 Then
If Tabelle1.Cells(I, 2) = Cont2.Text Or Cont2.ListIndex = -1 Then
If F * Tabelle1.Cells(I, 3) >= F * Val(Cont3.Text) Or Cont3.ListIndex = -1 Then
If Tabelle1.Cells(I, 4) >= Val(Cont4.Text) Or Cont4.ListIndex = -1 Then
If Tabelle1.Cells(I, 4) 

Anzeige
AW: Listbox filtern "größer/kleiner als" und Bereich
04.01.2017 17:53:32
Daniel
HI
mal so als erstes, das ganze gedöns mit den Variablen tempstr1 und tempstr2 brauchst du jetzt nicht mehr. ausßerdem darft du die ausgewehälten Werte der Comboboxen nicht mehr löschen, denn diese brauchst du ja, um zu prüfen welche Zeile in die Listbox soll und welche nicht.
dh das hier musst du auf jeden fall streichen:
		For I = 1 To 5
If Controls("Cont" & I).Value = "" Then ar(I - 1) = "*" Else ar(I - 1) = Controls("Cont" & I) _
_
.Value
tempStr1 = tempStr1 & ar(I - 1) & "/"
Controls("Cont" & I).Clear
Controls("Cont" & I) = IIf(ar(I - 1) = "*", "", ar(I - 1))
Next

Gruß Daniel
Anzeige
AW: Listbox filtern "größer/kleiner als" und Bereich
04.01.2017 18:25:57
Matthias
Hallo Daniel, ich habe es nun zum laufen gebracht, allerdings werden die Werte in der Listbox noch doppelt angezeigt. Ich benötige wohl nochmal deine Hilfe :)
Sub checkit()
Dim ar(5) As Variant, objMyDic As Object, I As Long, F As Long, tempStr1 As String, tempStr2  _
As String, tempStr3 As String, IntC As Integer, row_ As Integer
Dim ArCol(4)
ArCol(0) = 1
ArCol(1) = 2
ArCol(2) = 3
ArCol(3) = 4
ArCol(4) = 4
F = IIf(ToggleButton1.Value, 1, -1)
Set objMyDic = CreateObject("Scripting.Dictionary")
If chk = True Then
ContListfeld.Clear
For IntC = 1 To 5
For I = 2 To Tabelle1.Cells(Rows.Count, 1).End(xlUp).Row
If Tabelle1.Cells(I, 1) = Cont1.Text Or Cont1.ListIndex = -1 Then
If Tabelle1.Cells(I, 2) = Cont2.Text Or Cont2.ListIndex = -1 Then
If F * Tabelle1.Cells(I, 3) >= F * Val(Cont3.Text) Or Cont3.ListIndex = -1 Then
If Tabelle1.Cells(I, 4) >= Val(Cont4.Text) Or Cont4.ListIndex = -1 Then
If Tabelle1.Cells(I, 4) 

Anzeige
AW: Listbox filtern "größer/kleiner als" und Bereich
04.01.2017 18:31:53
Daniel
Hi
eigentlich müssten die Werte 5x angezeigt werden
die Schleife For IntC = 1 To 5 ist für das Befüllen der Listbox nicht notwendig
Gruß Daniel
AW: Listbox filtern "größer/kleiner als" und Bereich
05.01.2017 10:27:51
Matthias
Guten Morgen, für das Befüllen der ComboBoxen ist diese jedoch relevant, oder etwa nicht? Wenn ich For IntC = 1 To 5 entferne, werden die ComboBoxen zumindest nicht mehr befüllt.
AW: Listbox filtern "größer/kleiner als" und Bereich
05.01.2017 13:56:54
Daniel
Hi
nunja, deine Comboboxen musst du schon irgenwie befüllen, aber dafür musst du nicht 5x die Listbox befüllen, dann solltest das Trennen oder die Befüllung der Comboboxen in die andere Schleife integrieren.
gruß Daniel
AW: Listbox filtern "größer/kleiner als" und Bereich
05.01.2017 18:30:28
Matthias
Ich habe es nun wirklich mehrmals probiert, jedoch scheitere ich immer und immer wieder :( Es gibt ja mehrere Methoden um die ComboBox zu füllen, jedoch benötige ich zwingend die Lösung mit der Schleife - und das ist mein Problem. Ich kann den Code nicht ohne Probleme umstellen.
Anzeige
AW: Listbox filtern "größer/kleiner als" und Bereich
05.01.2017 18:42:50
Daniel
naja, du hast ihn ja auch ohne Probleme erstellt.
ich weiß ja nicht was du da konkret in den Boxen haben willst, so genau habe ich mir das nicht angeschaut, ich bin ja auch nicht dein Codeschreiberling (und irgenwie musst du diesen durchaus komplexen Code ja erstellt haben, das ist schon nicht ganz so einfach, also etwas Ahnung musst du schon haben.
wenn es so ist, dass nur die gefilterten Eintrage auch in die Comboboxen übernommen werden sollen, dann würde ich das befüllen der Dictionary auch im letzten IF-Block machen.
dh die Schleife über die 5 Comboboxen läuft innerhalb der Schleife über alle Zellen, dh nach diesem Schema:
For Zeile = 2 to letzte Zeilen
Prüfen ob Zeile in Listbox übernommen wird, wenn ja dann:
Spaltenwerte zu Listbox hinzufügen
For i = 1 to 5
Spaltenwerte zu Dictionary für comboboxen hinzufügen
Next
Prüfung Ende
Next
For i = 1 to 5
Comboboxen mit Dictionary-Inhalt füllen
Next

Gruß Daniel
Anzeige

316 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige