Ich habe heute zum ersten Mal VBA ausprobiert (... hauptsächlich aus der Excel-Hilfe und anderen Forenbeiträgen zusammengeklaubt und Rest Trial+Error) und hätte eine Frage. Vorab - mein Code funktioniert, ist aber ziemlich langsam und ich wüsste gerne, ob es nicht irgendwie eleganter geht.
Zuerst habe ich mir in Excel ein Dropdown-Menü in Zelle E7 mit den Werten Ebene 1-4 erstellt. Erklärtes Ziel ist es, dass ich, wenn ich im Dropdown Ebene 1 auswähle, all die Zeilen ausblende, die in Spalte A keinen Wert eingetragen haben. Bei Auswahl von Ebene 2 sollen alle Zeilen ausgeblendet werden, die weder in Spalte A noch in Spalte B einen Wert haben, und in Ebene 3 das gleiche Spiel plus Spalte C. In Ebene 4 soll alles sichtbar sein, ebenso wie wenn nichts ausgewählt ist.
Folgendes hab ich in VBA unter Tabelle geschrieben:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("E7").Value = "Ebene 1" Then
Makro4
End If
If Range("E7").Value = "Ebene 2" Then
Makro5
End If
If Range("E7").Value = "Ebene 3" Then
Makro6
End If
If Range("E7").Value = "Ebene 4" Then
Rows().EntireRow.Hidden = False
End If
If Range("E7").Value = "Ebene wählen" Then
Rows().EntireRow.Hidden = False
End If
End Sub
Makro 4 beinhaltet dann folgenden Schnipsel:
Sub Makro4()
Dim a
For a = 10 To 522
For Each i In Cells(a, 1)
If IsEmpty(i) = True Then
Rows(a).EntireRow.Hidden = True
End If
Next
Next
End Sub
Makro 5:
Sub Makro5()
Dim a
For a = 10 To 522
For Each i In Cells(a, 1)
If IsEmpty(i) = True Then
For Each k In Cells(a, 2)
If IsEmpty(k) = True Then
Rows(a).EntireRow.Hidden = True
End If
Next
End If
Next
Next
End Sub
Makro 6:
Sub Makro6()
Dim a
For a = 10 To 522
For Each i In Cells(a, 1)
If IsEmpty(i) = True Then
For Each k In Cells(a, 2)
If IsEmpty(k) = True Then
For Each m In Cells(a, 3)
If IsEmpty(m) = True Then
Rows(a).EntireRow.Hidden = True
End If
Next
End If
Next
End If
Next
Next
End Sub
Hat jemand eine Idee, wie man das schneller hinbekommen könnte?
Schonmal vielen Dank und ein schönes Wochenende :-)
LG Merry