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
![](https://images.gutefrage.net/media/user/Suboptimierer/1443606504450_nmmslarge__0_0_160_160_7f828fad18ee7edb96b8daceedaeeadb.png?v=1443606506000)
Ist ein Kontrollkästchen nicht eine Checkbox?
Was möchtest du anstelle des Click-Ereignisses der Checkbox(en) abfangen?
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
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
![](https://images.gutefrage.net/media/user/hannes1806/1460361699407_nmmslarge.jpg?v=1460361699000)
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.
![- (Microsoft Excel, VBA)](https://images.gutefrage.net/media/fragen-antworten/bilder/390844094/0_big.png?v=1615198924000)
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
![](https://images.gutefrage.net/media/user/IchMalWiederXY/1526297634563_nmmslarge__8_3_247_247_26a3615ed87a22b0c5c78d0564a9f676.jpg?v=1526297635000)
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..
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
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.
![](https://images.gutefrage.net/media/user/IchMalWiederXY/1526297634563_nmmslarge__8_3_247_247_26a3615ed87a22b0c5c78d0564a9f676.jpg?v=1526297635000)
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.
![](https://images.gutefrage.net/media/user/hannes1806/1460361699407_nmmslarge.jpg?v=1460361699000)
Ich versteh nicht, warum so kompliziert? Was ist schlecht daran, im Autofilter einfach Hund, Vogel oder Katze anzuklicken?
![](https://images.gutefrage.net/media/default/user/15_nmmslarge.png?v=1551279448000)
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?