2 For Each Schleifen mit Array in Excel VBA
Schritt-für-Schritt-Anleitung
-
Deklaration der Variablen: Stelle sicher, dass du Option Explicit
am Anfang deines Codes verwendest, um alle Variablen zu deklarieren. Dies hilft, Fehler durch nicht deklarierte Variablen zu vermeiden.
-
Initialisierung des Arrays: Erstelle dein Array, das die Zeilen oder Spalten enthält, die du durchlaufen möchtest. Zum Beispiel:
Dim SpArray As Variant
SpArray = Array(2, 4, 6, 7, 8)
-
VBA For Each Schleife: Verwende die For Each
-Schleife, um durch die Worksheets in deiner Arbeitsmappe zu iterieren:
For Each wks In wb.Worksheets
-
Innere Schleifen für Arrays: Nutze For Each
oder For To
für die Zeilen und Spalten, die du prüfen möchtest. Beachte, dass du bei For Each
die Elemente des Arrays direkt durchläufst:
For Each Row In ZlArray
For Each Column In SpArray
If Not .Cells(Row, Column) = 0 Then
Prüf = True
Exit For
End If
Next Column
Next Row
-
Prüfung und Löschung: Überprüfe, ob die Bedingung erfüllt ist und lösche das Arbeitsblatt, wenn dies nicht der Fall ist:
If Prüf = False Then
.Delete
End If
Häufige Fehler und Lösungen
- Doppelte Verwendung von
Exit For
: Stelle sicher, dass du Exit For
nicht mehrmals in der gleichen Schleife verwendest, da dies zu unerwartetem Verhalten führen kann.
- Verwendung von reservierten Wörtern: Variablen wie
Row
und Column
sind in VBA reservierte Wörter. Benenne sie um, um Konflikte zu vermeiden.
- Fehler bei der Array-Größe: Verwende
UBound
, um die Größe deines Arrays dynamisch zu bestimmen, anstatt eine feste Zahl zu verwenden. Dies ist besonders nützlich, wenn du neue Werte hinzufügst.
Alternative Methoden
-
For To Schleife: Wenn du Lücken in deinem Array hast, kann es sinnvoll sein, eine For To
-Schleife mit UBound
zu verwenden, um über die Indizes des Arrays zu iterieren:
For i = 0 To UBound(ZlArray)
Reihe = ZlArray(i)
' Weitere Logik hier
Next i
-
VBA Array Durchlaufen: Anstelle von For Each
kannst du auch For i = 0 To UBound(Array)
verwenden, um direkt auf die Indizes zuzugreifen.
Praktische Beispiele
Hier ist ein Beispiel, das zeigt, wie du mit For Each
die Zellen eines Arbeitsblattes prüfen kannst:
Dim i As Long
Dim SpArray As Variant
Dim ZlArray As Variant
Dim Prüf As Boolean
SpArray = Array(2, 4, 6, 7, 8)
ZlArray = Array(1, 5, 7, 8, 9, 14)
For Each wks In wb.Worksheets
Prüf = False
With wks
For Each Row In ZlArray
For Each Column In SpArray
If Not .Cells(Row, Column) = 0 Then
Prüf = True
Exit For
End If
Next Column
If Prüf Then Exit For
Next Row
If Not Prüf Then
.Delete
End If
End With
Next wks
Tipps für Profis
- Verwende
Option Explicit
: Dies zwingt dich, alle Variablen zu deklarieren, was Fehler verhindert.
- Nutze
UBound
für dynamische Arrays: Du musst deinen Code nicht anpassen, wenn sich die Größe deines Arrays ändert.
- Code kommentieren: Halte deinen Code mit Kommentaren klar verständlich, besonders bei komplexeren Schleifen.
- Debugging: Nutze den Debugger von VBA, um die Ausführung deines Codes Schritt für Schritt zu verfolgen.
FAQ: Häufige Fragen
1. Laufen die Schleifen nur die im Array angegebenen Elemente durch?
Ja, die Schleifen durchlaufen nur die Elemente, die im Array definiert sind. Wenn du Array(1, 2, 5, 6)
hast, werden nur diese Werte durchlaufen.
2. Was ist der Unterschied zwischen For Each
und For To
?
For Each
wird verwendet, um durch alle Elemente eines Arrays zu iterieren, während For To
eine Schleife über feste Indizes ermöglicht. Bei Lücken im Array ist For To
oft die bessere Wahl.