Array durchlaufen und Zeilen löschen in Excel
Schritt-für-Schritt-Anleitung
- Öffne Deine Excel-Datei und wechsle zur Tabelle "Daten".
- Drücke
ALT
+ F11
, um den VBA-Editor zu öffnen.
- Klicke auf
Einfügen
und dann auf Modul
, um ein neues Modul zu erstellen.
- Füge den folgenden VBA-Code ein, um ein Array durchlaufen und Zeilen zu löschen, die nicht mit den definierten Kriterien übereinstimmen:
Sub ZeilenLoeschen()
Dim lngZeile As Long, i As Integer
Dim arrKuerzel As Variant
arrKuerzel = Split("ABC;AZZ;XYZ1;AZ36", ";")
Application.ScreenUpdating = False
With Worksheets("Daten")
For lngZeile = .Cells(.Rows.Count, 1).End(xlUp).Row To 2 Step -1
For i = LBound(arrKuerzel) To UBound(arrKuerzel)
If .Cells(lngZeile, 1) Like arrKuerzel(i) & "*" Then Exit For
Next i
If i > UBound(arrKuerzel) Then .Rows(lngZeile).Delete
Next lngZeile
End With
Application.ScreenUpdating = True
End Sub
- Schließe den VBA-Editor und kehre zu Excel zurück.
- Drücke
ALT
+ F8
, wähle ZeilenLoeschen
und klicke auf Ausführen
.
Häufige Fehler und Lösungen
Alternative Methoden
Eine alternative Methode, um Zeilen zu löschen, besteht darin, zuerst die Zeilen mit einer Formel zu markieren und dann die Excel-Funktion "Duplikate entfernen" zu verwenden. Hier ist ein Beispiel:
Sub entfernen()
Dim var As String
var = "ABC;AZZ;XYZ1;AZ36"
var = "{""" & Replace(var, ";", """,""") & """}"
With Sheets("Daten").Cells(1, 1).CurrentRegion
With .Columns(.Columns.Count + 1)
.FormulaR1C1 = "=IF(OR(Left(RC1,Len(_var_))=_var_),Row(),0)"
.Cells(1, 1).FormulaR1C1 = 0
.EntireRow.RemoveDuplicates .Column, xlNo
.ClearContents
End With
End With
End Sub
Diese Methode kann bei großen Datenmengen effizienter sein, da sie die Zeilen zuerst markiert, bevor sie gelöscht werden.
Praktische Beispiele
Hier sind einige Beispiele, wie Du das VBA-Skript anpassen kannst:
- Variablen anpassen:
Um das Array dynamisch zu gestalten, kannst Du den Inhalt einer Zelle verwenden:
Sub ZeilenLoeschenMitVariable()
Dim lngZeile As Long, i As Integer
Dim arrKuerzel As Variant
Dim strText As String
strText = Worksheets("Daten").Cells(1, 1).Value ' Beispiel: Zelle A1
arrKuerzel = Split(strText, ";")
' Der Rest des Codes bleibt gleich
End Sub
- Zusätzliche Bedingungen hinzufügen:
Wenn Du beispielsweise nur Zeilen löschen möchtest, die in Spalte B einen bestimmten Wert haben, kannst Du dies leicht integrieren.
Tipps für Profis
- Vermeide Bildschirmaktualisierungen: Setze
Application.ScreenUpdating = False
, um die Leistung zu verbessern, während das Skript läuft.
- Nutze die Union-Funktion: Wenn Du mehrere Zeilen auf einmal löschen möchtest, kannst Du die
Union
-Funktion verwenden, um die zu löschenden Zeilen zu gruppieren.
- Debugging-Hilfen: Füge
Debug.Print
-Anweisungen hinzu, um den Status des Skripts während der Ausführung zu überprüfen.
FAQ: Häufige Fragen
1. Frage: Kann ich das Array auch aus einem anderen Arbeitsblatt beziehen?
Antwort: Ja, Du kannst den Wert aus einer Zelle in einem anderen Arbeitsblatt lesen, indem Du den Namen des Arbeitsblattes in der Zuweisung angibst.
2. Frage: Was ist der Unterschied zwischen Like
und =
in VBA?
Antwort: Like
wird verwendet, um Muster zu vergleichen, während =
einen exakten Vergleich durchführt. Wenn Du nach Teilstrings suchst, verwende Like
.
3. Frage: Wie kann ich sicherstellen, dass das Makro nur auf sichtbare Zeilen angewendet wird?
Antwort: Du kannst die SpecialCells
-Methode verwenden, um nur sichtbare Zeilen auszuwählen, bevor Du das Löschen durchführst.