Wie kann ich meine Excel (VBA) "Zeile Ein- und Ausblenden Formel" vereinfachen?
Hallo zusammen
Ich suche nach einer schnelleren Formellösung, welche alle Zeilen ausblendet, wenn in Spalte A der jeweiligen Zeile das Formelergebnis 0 steht und wieder einblendet, wenn das Ergebnis 1 ist. Die Rechnung passiert dabei auf einer anderen Tabelle; in der Tabelle mit dem Makro steht dann lediglich: ='Tabelle2'!A11 (Dieser Wert wird somit übertragen und ändert sich demzufolge)
Makro:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Range("A11") = 0 Then
Rows("11:12").EntireRow.Hidden = True
End If
If Range("A11") <> 0 Then
Rows("11:12").EntireRow.Hidden = False
End If
If Range("A13") = 0 Then
Rows("13:14").EntireRow.Hidden = True
End If
If Range("A13") <> 0 Then
Rows("13:14").EntireRow.Hidden = False
End If
If Range("A15") = 0 Then
Rows("15:16").EntireRow.Hidden = True
End If
If Range("A15") <> 0 Then
Rows("15:16").EntireRow.Hidden = False
End If
...
(UNTERBRUCH) ...........das geht weiter bis "A360"
...
End Sub
Dieser Ablauf dauert jedoch eine gefühlte Ewigkeit; geht das schneller?
Danke euch.
Gruss Swen
2 Antworten
Baue um die Schleife.
Application.Screenupdate = False
Application.EnableEvents = False
For i = 11 To 15 Step 2
If Range("A" & i).Value = 0 Then
Rows(i & ":" & i + 1).EntireRow.Hidden = True
Else
Rows(i & ":" & i + 1).EntireRow.Hidden = False
End If
Next i
Application.Screenupdate = True
Application.EnableEvents = True
Mach eine Schleife, anstatt jede einzelne Zeile aufzuführen.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim i As Integer
For i = 11 To 15 Step 2
If Range("A" & i).Value = 0 Then
Rows(i & ":" & i + 1).EntireRow.Hidden = True
Else
Rows(i & ":" & i + 1).EntireRow.Hidden = False
End If
Next i
End Sub
Keine Ahnung, ob es schneller geht.
Aber besser und übersichtlicher ist es.
habs nochmals schnell bei mir eingegeben...
seltsam. Bei mir geht das ein paar Sekunden.
Du kannst versuchen, vor
"For i = 11....." den Befehl
Application.ScreenUpdating = False
einzufügen und nach "Next i" wieder
Application.ScreenUpdating = True
Das lässt es nochmal schneller laufen.
Hey das ist eine echt tolle Vereinfachung. Danke dafür.
Zeitlich sinds dann halt doch noch 5min (Zeile 11 - 709) aber das ist wohl einfach so.
Danke