HERBERS
Excel-Forum
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Entdecke rund 2 Millionen Excel-Lösungen im
Forumsarchiv

Beiträge zum Thread: Ausblenden von Zeilen bei bestimmten Voraussetzungen

Forumbeitrag
Excel-Version des Fragestellers:
2022
Erfahrungslevel des Fragestellers:
VBA nur mit Recorder
IseGrimm
25.05.2026 17:34:51
Ausblenden von Zeilen bei bestimmten Voraussetzungen
habe wenig Vorkenntnisse in VBA. Ich möchte in einem Spiel bei Runde 1 die übrigen Runden (2-5 z.B.) ausblenden.
Ich habe mir das mühsam zusammengeschustert - funktioniert natürlich nicht richtig.
Mein Problem ist: wenn ich in A1 eine 1 eingebe und mit Enter bestätige, muss ich noch einmal die Zelle A1 anklicken, damit es funktioniert. Was mache ich falsch?

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("A1")) Is Nothing Then
Else
Cells.EntireRow.Hidden = False
If Range("A1") = 1 Then
Rows("10:20").EntireRow.Hidden = True
End If
If Range("A1") = 2 Then
Rows("20:30").EntireRow.Hidden = True
End If
End If
End Sub



Forumbeitrag
Excel-Version des Fragestellers:
2022
Erfahrungslevel des Fragestellers:
VBA nur mit Recorder
Marc
25.05.2026 18:01:27
AW: Ausblenden von Zeilen bei bestimmten Voraussetzungen
Das Verhalten kommt daher, dass du das Ereignis Worksheet_SelectionChange verwendest. Dieses wird nur ausgelöst, wenn die Auswahl auf ein anderes Feld wechselt, nicht wenn der Inhalt einer Zelle geändert wird.

Biespiel:



Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub

Rows.Hidden = False

Select Case Range("A1").Value
Case 1
Rows("10:20").Hidden = True

Case 2
Rows("20:30").Hidden = True

Case 3
Rows("30:40").Hidden = True

Case 4
Rows("40:50").Hidden = True

Case 5
Rows("50:60").Hidden = True
End Select

End Sub



zusätzlich:
-Exit Sub macht den Code übersichtlicher als ein leeres Else.
- Range("A1").Value ist sauberer als nur Range("A1").
- Rows.Hidden = False blendet zunächst alle Zeilen wieder ein.
- Select Case ist bei mehreren Werten deutlich lesbarer als viele If-Abfragen.

Forumbeitrag
Excel-Version des Fragestellers:
2022
Erfahrungslevel des Fragestellers:
VBA nur mit Recorder
Daniel
25.05.2026 18:13:11
AW: Ausblenden von Zeilen bei bestimmten Voraussetzungen
"-Exit Sub macht den Code übersichtlicher als ein leeres Else."

Das Exit Sub an dieser Stelle sorgt aber für Probleme, wenn wenn an in diesem Event noch weitere Codes für andere Einganezellen benötigt.
Daher ist es die schlechtere Wahl und das leere else die bessere, weil man dann sieht: "hier geht es weiter, wenn andere Zellen geändert werden werden"

Wobei ich aber auch die Logik umdrehen würde mit

If not Intersect(Range("A1"), Target) is Nothing Then

Hier der Code
End If


Aber Exit Sub ist immer "Quick and dirty" und hat schon häufiger zu nachfragen in den Foren geführt, wenn das Makro für andere Zellen erweitert werden soll.

Gruß Daniel
Forumbeitrag
Excel-Version des Fragestellers:
2022
Erfahrungslevel des Fragestellers:
VBA nur mit Recorder
Marc
25.05.2026 18:18:53
AW: Ausblenden von Zeilen bei bestimmten Voraussetzungen
Tatsächlich würde ich das Exit Sub bei mir auch ans Ende machen, und wie du meinst, die Logik umdrechen...
Allerdings war ich da schneller beim versenden als noch mal kontrollieren..

Grundsätzlich gäbe es da natürlich noch andere Möglichkeiten und sollte erstmal nur simples Beispiel sein...

Wenn andere Code Zeilen noch kommen, die unabhängig von dieser Abfrage kommen, muss man natürlich noch anders aufbauen.. aber davon war im Thread oben zunächst nichts zu lesen
Forumbeitrag
Excel-Version des Fragestellers:
2022
Erfahrungslevel des Fragestellers:
VBA nur mit Recorder
IseGrimm
26.05.2026 08:51:35
AW: Ausblenden von Zeilen bei bestimmten Voraussetzungen
Finde es super, wie schnell und ausführlich "man hier geholfen wird"! Hab das umgesetzt und funktioniert auch im Prinzip, aber es ergeben sich 2 neue Fragen:
1. wenn der Code sich auf A1 bezieht und darin steht nicht einfach eine 1 sondern das Ergebnis einer Berechnung, tut sich gar nichts. Überschreibe ich die Zelle mit einer 1, funktioniert es.
2. sicher die Frage eines absoluten Laien: Ich hab den Code kopiert und abgespeichert. Wenn ich das Programm wieder aufrufe, wird mir über den Reiter "Makros anzeigen" nichts angeboten - erst, wenn ich mit ALT+F11 arbeite, erscheint der Code. Was mache ich falsch?
Forumbeitrag
Excel-Version des Fragestellers:
2022
Erfahrungslevel des Fragestellers:
VBA nur mit Recorder
daniel
26.05.2026 09:54:05
AW: Ausblenden von Zeilen bei bestimmten Voraussetzungen
Hi
zu 2.
"Makros anzeigen" zeigt dir die Makros, die du direkt ausführen kannst und darfst, dh sie sind nicht als "Private" deklariert und es wird keine Variablenübergabe benötigt.
Dies ist bei den automatischen Event-Makros aber nicht der Fall, da sie ja über das Event ausgelöst werden und in der Regel eine übergebene Variable haben (z.B Target, welches die geänderte oder selektierte Zelle(n) enthältn
Um zu diesen Makros zu kommen musst du mit der rechten Maustaste auf den Tabellenblattreiter klicken und "Code anzeigen" auswählen.

zu 1.
ja, das Change-Eventmakro springt nur an, wenn du einen Zellinhalt von Hand änderst.
wenn dort eine Formel steht, die neu berechnet wird, dann reagiert Change nicht.
Dafür gibt es das Calculate-Event, dieses wird ausgeführt, wenn auf einem Tabellenblatt ein Zellwert per Formel berechnet wird.
leider kannst du hier nicht ermitteln, welche Zellen neu berechnet wurden und ob sich der Wert auch tatsächlich geändert hat.

ein möglicher Workaround ist, dass du im Change-Event nicht die Zelle mit der Formel überwachst, sondern die Zellen, die das Formelergebnis beeinflussen und von Hand verändert werden.

alternativ kannst du Calculate verwenden, solltest dir aber den alten Zellwert merken, damit dein Makro nicht ständig arbeiten muss, auch wenn sich nichts geändert hat.
Private Sub Worksheet_Calculate()

Static AlterWertA1 As Variant

If Range("A1").Value = AlterWertA1 Then
'--- nichts machen
Else
'--- hier der Code, der ausgeführt werden soll, wenn sich A1 geändert hat
'...
'...
AlterWertA1 = Range("A1").Value
End If

End Sub

eine Static-Variable behält ihren Wert wenn das Makro zu ende ist und hat dann diesen Wert, wenn das Makro neu gestartet wird (normale Variablen sind dann leer und müssen erst gefüllt werden)
dh hier merkst du dir den alten Wert, um zu vermeiden das das Makro unnötig arbeitet, wenn auf dem Blatt eine Neuberechnung stattgefunden hat, ohne dass sich dieser Zellwert dabei verändert hat.

Gruß Daniel
Forumbeitrag
Excel-Version des Fragestellers:
2022
Erfahrungslevel des Fragestellers:
VBA nur mit Recorder
GerdL
26.05.2026 13:03:45
AW: Ausblenden von Zeilen bei bestimmten Voraussetzungen
Moin
Private Sub Worksheet_Calculate()


Static AEins As Variant
Dim calc As Long
On Error Goto fin
Application.EnableEvents = False
calc = Application.Calculation
Application.Calculation = xlCalculationManual
If AEins <> Cells(1, 1) Then
Rows.Hidden = False
Select Case Cells(1, 1)

Case 1 To 2
Cells(Cells(1, 1) * 10, 1).Resize(11).EntireRow.Hidden = True

End Select
End If
AEins = Cells(1, 1)
fin:
Application.EnableEvents = True
Application.Calculation = calc

End Sub

Gruß Gerd
Forumbeitrag
Excel-Version des Fragestellers:
2022
Erfahrungslevel des Fragestellers:
VBA nur mit Recorder
Daniel
25.05.2026 18:03:30
AW: Ausblenden von Zeilen bei bestimmten Voraussetzungen
Hi

Falsches Event. Verwende das Change-Event, nicht SelectionChange.

Das Change-Event wird ausgelöst, nachdem du den Zellwert geändert hast.
Das SelectionChange-Event spricht an, wenn du die Zelle anklickst. Das ist in diesem Fall aber zu früh, da dann der richtige Wert noch nicht in der Zelle steht, daher musst du dir Zelle ein zweites Mal anklicken.
Gruß Daniel
Forumbeitrag
Excel-Version des Fragestellers:
2022
Erfahrungslevel des Fragestellers:
VBA nur mit Recorder
snb
26.05.2026 09:33:02
AW: Ausblenden von Zeilen bei bestimmten Voraussetzungen
Verwende
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$A$1" Then
Rows.Hidden = False
Rows(10 * Target).Resize(10).Hidden = True
End If
End Sub