Wie kann ich Kontrollkästchen elegant miteinander verknüpfen, um nach mehreren Kriterien zu filtern?
Hallo zusammen,
in einer ExcelDatei befinden sich Formularsteuerlemente bzw. 3 Kontrollkästchen mit denen ich verschiedene Kriterien nach Hunde, Katzen und Vögel filtern sowie verknüpfen möchte.
Mit ActiveX-Steuerelemente Kontrollstästchen und CommandButton konnte ich folgendes Beispiel aufbauen:
Private Sub ausführen_Click()
If CheckBox1.Value = True And CheckBox2.Value = False And CheckBox3.Value = False Then
Hund
ElseIf CheckBox1.Value = False And CheckBox2.Value = True And CheckBox3.Value = False Then
Katze
ElseIf CheckBox1.Value = False And CheckBox2.Value = False And CheckBox3.Value = True Then
Vogel
ElseIf CheckBox1.Value = True And CheckBox2.Value = True And CheckBox3.Value = False Then
HundKatze
ElseIf CheckBox1.Value = False And CheckBox2.Value = True And CheckBox3.Value = True Then
KatzeVogel
ElseIf CheckBox1.Value = True And CheckBox2.Value = False And CheckBox3.Value = True Then
HundVogel
ElseIf CheckBox1.Value = True And CheckBox2.Value = True And CheckBox3.Value = True Then
Alle
Else
MsgBox ("Es wurde nichts ausgewählt")
End If
End Sub
Sub Hund()
' Hund Makro
Worksheets("Tabelle2").Range("$A$4:$B$8").AutoFilter Field:=2, Criteria1:="Hund"
End Sub
Sub Katze()
' Katze Makro
Worksheets("Tabelle2").Range("$A$4:$B$8").AutoFilter Field:=2, Criteria1:="Katze"
End Sub
Sub Vogel()
' Vogel Makro
Worksheets("Tabelle2").Range("$A$4:$B$8").AutoFilter Field:=2, Criteria1:="Vogel"
End Sub
Sub Alle()
' Alle Makro
Worksheets("Tabelle2").Range("$A$4:$B$8").AutoFilter Field:=2
End Sub
Sub HundKatze()
' HundKatze Makro
ActiveSheet.Range("$A$6:$B$13").AutoFilter Field:=2, Criteria1:="=Hund", _
Operator:=xlOr, Criteria2:="=Katze"
End Sub
Sub KatzeVogel()
' KatzeVogel Makro
ActiveSheet.Range("$A$6:$B$13").AutoFilter Field:=2, Criteria1:="=Katze", _
Operator:=xlOr, Criteria2:="=Vogel"
End Sub
Sub HundVogel()
' HundVogel Makro
ActiveSheet.Range("$A$6:$B$13").AutoFilter Field:=2, Criteria1:="=Hund", _
Operator:=xlOr, Criteria2:="=Vogel"
End Sub
Das funktioniert soweit ganz gut.
Allerdings benötige ich Formularsteuerelemente Kontrollkästchen. Die Ergebnisse sollen sich schon während ein Kontrollkästchen betätigt wird aktualisieren. Aktuell läuft das über ActiveX-Steuerelemente Kontrollkästchen und CommandButton.
Gegenüberstellung der Varianten:
Nachgebaute Excel:
Bis auf die G4 funktioniert alles sehr gut. Vielleicht seht ihr den Fehler. Auf eine einfache Formel wie im Funktionstest reagiert die Zelle.
Vielen Dank für eure Hilfe. Liebe Grüße
Ist ein Kontrollkästchen nicht eine Checkbox?
Was möchtest du anstelle des Click-Ereignisses der Checkbox(en) abfangen?
Oh stimmt: In dem Beispiel was ich gebaut habe handelt es sich um ein Active X Kontrollkästchen. In der Datei sind es Formularsteuerelemt Kontrollkästchen. Das änder ich ab
3 Antworten
Hallo knefie, ich kann kein Bild in die Kommentare einfügen, daher neue Antwort.
Ok, verstehe. Dann geht es aber ohne Makro, nur mit Formeln. Der Übersicht halber habe ich die 2 Tabellen auf einer dargestellt, in Spalte B sind deine Tiere:
Zuerst ermittle ich die Treffer, also jene Zeilen, die mindestens einer Bedingung entsprechen mit Formel in G4 (und runter kopieren):
=WENN(ODER(UND($D$3;B4=$D$2);UND($E$3;B4=$E$2);UND($F$3;B4=$F$2));ZEILE();"")
Dann liste ich die Zeilennummern aufsteigend auf mit dieser Formel in H4 (und runter kopieren):
=WENNFEHLER(KKLEINSTE(G:G;ZEILE(H1));"")
Zum Schluss hole ich mir alle Daten aus Tabelle 1 zur entsprechenden Zeile, z.B. Formel in I4 (nach rechts und nach unten kopieren):
=WENNFEHLER(INDEX(A:A;$H4);"")
Wenn die Gefahr besteht, dass in Tabelle1 Zeilen eingefügt bzw. gelöscht werden, musst du die Formel in G4 indirekt adressieren.

Jede Checkbox hat auch ein "ChangeEvent".
Mach mal im Entwurlsmodus ein Doppelklick auf die CheckBox.
Dann wird zunächst eine Sub erstellt, die _Click heißt.
Wähle dann Change aus.
In dieser Change Funktion kannst du dann deine:
Call ausführen_Click
aufrufen. (ggf vorher "Public bekannt machen.)
Die Msg Box braucht man eigentlich nicht , denn wenn nichts ausgewählt ist sollte sich der Filter auf neutral stellen..
Gibt es die Möglichkeit dieses über die Formularsteuerelemente Kontrollkästchen zu erreichen oder nur über die ActiveX Kontrollkästchen? Ich habe gesucht aber bisher nichts gefunden.
Dies geht auch mit Formular Kästchen.
Denn so ein Formular Kästchen ist mit einer Zelle verknüpft. Wenn sich dann durch klicken diese Zelle ändert wird das "Worksheet_Change" Event ausgelöst welches wiederum deine Funktion aufrufen kann.
Du machst dies übrigens komplizierter als nötig. man kann dem Filter ein "Array" übergeben, was alles angeklickt werden soll.
Ich versteh nicht, warum so kompliziert? Was ist schlecht daran, im Autofilter einfach Hund, Vogel oder Katze anzuklicken?
Es handelt sich um eine bestehende Datei mit zwei Tabellenblättern. Das erste Tabellenblatt hat Kontrollkästchen und das zweite Tabellenblatt zeigt die verschiedenen Kategorien nach Auswahl an.
Ich habe die Datei 1:1 nachgebaut um das Gleiche Ergebnis zu erzielen. Bei den Treffern mit der Formel =WENN(ODER(UND($D$3;B8=$D$2);UND($E$3;B8=$E$2);UND($F$3;B8=$F$2));ZEILE();"") bleibt die Zelle Leer bzw reagiert nicht auf das Wahr oder Falsch. Wenn ich manuell eingebe funktionieren die restlichen Ausgaben. Woran kann das liegen?