Zeilen in Abhängigkeit von Zellwert ausblenden?

Dietwald2016  11.12.2024, 15:07

Was meinst Du mit "komplett ausblenden"? Zellinhalt löschen? Zelle verschwinden lassen gibt es nicht.

Mietze1171 
Beitragsersteller
 13.12.2024, 06:33

Mit komplett ausblenden, meinte ich die Funktion Zeile ausblenden (Hide). Der Inhalt der Zellen muss erhalten bleiben.

1 Antwort

So eine Aufgabenstellung lässt sich in Excel meines Wissens nur per Makro lösen, da es keine entsprechende Excel-Funktion =AUSBLENDEN() gibt. Ich kenne eine solche Funktion aus einem Business-Intelligence-Programm, aber in Excel gibt es das nicht. Hier müsstest du ein Makro für die entsprechenden Zellen bauen und jeden einzelnen Fall abfragen, da die auszublendenden Zeilen immer variieren.

Für das erste Beispiel müsste im jeweiligen Tabellenblatt im VBA-Editor (zu erreichen mit Alt-F11) im Segment Worksheet unter dem Trigger "Activate" zum Beispiel der folgende Code eingefügt werden. Der Code würde dann immer beim Wechsel auf das Tabellenblatt (also beim Aktivieren des Tabellenblatts) ausgeführt werden.

Alt-F11 drücken

Links im Projekt-Explorer Doppelklick auf den Namen des Tabellenblatts. Rechts hast du einen großen leeren Bereich. Dort den folgenden Code reinkopieren und das Blatt als .XLSM speichern:

Private Sub Worksheet_Activate()
   If Range("C8").Value = "no" Or Range("C8").Value = "" Then
       Rows("11:28").Select
       Selection.EntireRow.Hidden = True
   Else
       Rows("11:28").Select
       Selection.EntireRow.Hidden = False
   End If
End Sub
Woher ich das weiß:Berufserfahrung – mehr als 20 Jahre in einem Softwarehaus

Mietze1171 
Beitragsersteller
 10.12.2024, 17:07

Hi,
danke.
Das klappt, allerdings bleiben die Zellen auch ausgeblendet, wenn was anderes in C8 steht...
Und wie bekomme ich das hin unterschiedliche Aktionen (siehe oben) in beiden Blättern auszuführen?

Mietze1171 
Beitragsersteller
 10.12.2024, 17:24
@Mietze1171

Hab da mal was anderes ausprobiert:

Private Sub Worksheet_Change(ByVal Target As Range)

'prüfen ob Zelle C8 leer

  If Not Intersect(Target, Range("C8")) Is Nothing Then

'Zeilen einblenden

  Cells.EntireRow.Hidden = False

'prüfen ob text ungleich no

  If Range("C8").Value <> "no" Then

  Rows("11:28").EntireRow.Hidden = True

'prüfen ob C8 leer

  If Range("C8").Value = "" Then

  Rows("11:28").EntireRow.Hidden = False

'prüfen ob Zelle C15 leer

  If Not Intersect(Target, Range("C15")) Is Nothing Then

'Zeilen einblenden

  Cells.EntireRow.Hidden = False

'prüfen ob C15 gleich yes

  If Range("C15").Value = "yes" Then

  Rows("18:28").EntireRow.Hidden = True

  End If

  End If

  End If

  End If

End If

End Sub

Alles was sich auf Zelle C8 bezieht funktioniert. Das was sich auf C15 bezieht funktioniert nicht. Wie bekomme ich das hin?
Dann bleibt noch die Frage, wie bekomme ich es hin auch noch eine Aktion auf dem 2. Blatt auszuführen?

arminho1  10.12.2024, 19:24
@Mietze1171

Schön dass es soweit geklappt hat. Du willst doch bei C15 auf das andere Tabellenblatt zugreifen, oder? Dann musst du statt  

If Range("C15").Value = "yes" Then

auch das Workseet angeben:

 If Worksheets("CA Validation").Range("C15").Value = "yes" Then

falls ich das oben richtig gelesen habe,

arminho1  10.12.2024, 19:29
@Mietze1171

Ich habe mal oben im ersten Post das Skript ergänzt. Im Else-Teil werden die gleichen Zellen einfach wieder eingeblendet, also immer wenn C8 nicht "no" und nicht leer ist. Du kannst natürlich auch Rows("11:28").EntireRow.Hidden schreiben.