Ein-/ausblenden von Tabellenzeilen per CheckBox

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Ein-/ausblenden von Tabellenzeilen per CheckBox
von: TerPursche
Geschrieben am: 14.07.2015 10:14:34

Hallo zusammen!
Nachdem mir beim letzten mal schon so hervorragend geholfen wurde, komme ich mit einer neuen Frage zu euch. Ich habe eine Tabelle, welche sich vereinfacht wie folgt darstellen lässt:

KontenbezeichnungSoll 2015Ist 2015Abweichung [€]Soll 2014Ist 2014Abweichung [€]
Instandhaltung10000100000850085000
Hilfs- und Betriebsstoffe1200014000-200012000100002000
Versand1000022000-1200010000100000
Einkauf4600050000-400046000400006000
Fertigung6500075000-1000065000600005000

Nun ist der Wunsch meines Praktikumsbetreuers, dass mithilfe von Kontrollkästchen sich mehrere "Funktionen" an- und abwählen lassen. Zwei Beispiele:
  • Das Ausblenden Reihen mit Abweichungen 2015 von weniger als 5000€ (Positiv und Negativ)

  • Das Ausblenden von Reihen mit Ist2015 - Ist2014 kleiner als 10 Prozent (Positiv und negativ)

  • Wichtig ist, dass mehrere Checkboxen angewählt werden können ohne die Funktion der anderen zurückzusetzen. Für die beiden Beispiele mal meine rudimentären Versuche:
    Private Sub CheckBox1_Click()
    If CheckBox1.Value = True Then
     Set CellRange = Range("I5:I188")
      For Each Cell In CellRange
        If Cell.EntireRow.Hidden = False Then
        Cell.EntireRow.Hidden = (Cell.Value < 5000 And Cell.Value >= -5000)
        End If
      Next
    Else
     Set CellRange = Range("I5:I188")
      For Each Cell In CellRange
        If (Cell.Value < 5000 And Cell.Value >= -5000) Then
        Cell.EntireRow.Hidden = False
        End If
      Next
    End If
    End Sub
    Private Sub CheckBox2_Click()
    If CheckBox2.Value = True Then
     Set CellRange = Range("H5:H188")
      For Each Cell In CellRange
        If (((Cell.Value - Cell.Offset(0, 4).Value) / Cell.Value) < 0.1 And ((Cell.Value - Cell. _
    Offset(0, 4).Value) / Cell.Value) >= -0.1) And Cell.EntireRow.Hidden = False Then
        Cell.EntireRow.Hidden = True
        End If
      Next
    Else
    Set CellRange = Range("H5:H188")
      For Each Cell In CellRange
        If (((Cell.Value - Cell.Offset(0, 4).Value) / Cell.Value) < 0.1 And ((Cell.Value - Cell. _
    Offset(0, 4).Value) / Cell.Value) >= -0.1) And Cell.EntireRow.Hidden = True Then
        Cell.EntireRow.Hidden = False
        End If
      Next
    End If
    End Sub
    I5:I188 ist hier die Spalte mit den Abweichungen und H5:H188 diejenige mit den Ist_2015 Werten.
    Meine probleme sind nun: Erstens ist der Code nicht sehr elegant und ich suche nach Verbesserungsvorschlägen. Zweitens: Sofern in einer Zeile die Bedingungen für beide CheckBoxen erfüllt sind und beide Checkboxen markiert sind, werden beim entfernen von einem der Haken Zeilen eingeblendet, welche durch die andere CheckBox jedoch ausgeblendet bleiben sollten.
    Entschuldigt bitte den langen Text, ich habe versucht präzise zu sein. Und ich erwarte auch nicht zwingend eine vorgekaute Lösung, aber wenn wer Ideen oder Denkanstöße hätte, womit ich mich in diesem Fall am besten was eingehender Beschäftigen sollte, wäre ich sehr dankbar!
    Gruß, Jan

    Bild

    Betrifft: AW:Wie wär's mit dem AutoFilter?
    von: Michael (migre)
    Geschrieben am: 14.07.2015 10:29:56
    Hallo Jan!
    Warum Du Dir hier wirklich VBA, insbesondere Checkboxen, antun willst, ist mir nicht ersichtlich.
    Du hast doch offenbar eine funktionierende Ausgangstabelle, der AutoFilter lässt sich bei markierter Zelle in der Tabelle mit [Strg + Umschalt + L] aufrufen. Mehrere Filterkriterien, wie von Dir gewünscht, können kombiniert werden; einfach mal ausprobieren. Evtl. brauchst Du für Deine zweite Filterung eine zusätzliche Spalte, aber das wär schon alles. Dafür VBA halte ich für Overkill!
    LG
    Michael

    Bild

    Betrifft: AW: AW:Wie wär's mit dem AutoFilter?
    von: TerPursche
    Geschrieben am: 14.07.2015 10:37:42
    Hallo Michael,
    vielen Dank für deine schnelle Hilfe! Du hast sicherlich Recht, in meinem Kopf hat das Anfangs noch etwas mehr Sinn gemacht. Ausserdem finde ich die Übersichtlichkeit mit Hilfe von CheckBoxen "besser". Ich werde mich dann wahrscheinlich nach deinem Vorschlag richten. Dennoch noch der verzweifelte Versuch:
    Lassen sich AutoFilter speichern und per Checkbox ansprechen? :)
    Danke nochmal und Gruß!
    Jan

    Bild

    Betrifft: AW: AW:Wie wär's mit dem AutoFilter?
    von: TerPursche
    Geschrieben am: 14.07.2015 10:58:24
    Okay, geht!
    Habs hinbekommen mit:

    Private Sub CheckBox1_Click()
    If CheckBox1.Value = True Then
        ActiveSheet.ListObjects("Tabelle1").Range.AutoFilter Field:=8, Criteria1:= _
            ">=5000", Operator:=xlAnd
        Else
        ActiveSheet.ListObjects("Tabelle1").Range.AutoFilter Field:=8
    End If
    End Sub
    Werde das zweite Problem dann mit der Hilfsspalte lösen.
    Danke und noch einen schönen Tag!
    Gruß, Jan

    Bild

    Betrifft: AW: Wollte Dir soeben noch schreiben...
    von: Michael (migre)
    Geschrieben am: 14.07.2015 11:16:01
    Jan,
    ...dass sich ein AutoFilter prinzipiell per VBA ansteuern/setzen lässt. Schön, dass Du experimentiert und eine Lösung für Dich gefunden hast.
    Dir auch einen schönen Tag
    Michael

     Bild

    Beiträge aus den Excel-Beispielen zum Thema "Ein-/ausblenden von Tabellenzeilen per CheckBox"