Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: mit Schleife Tabelle durchlaufen, zeilen löschen

mit Schleife Tabelle durchlaufen, zeilen löschen
26.09.2017 21:14:19
Jan
Hallo liebe Community,
auf der Zielgeraden ist noch ein Problem aufgetreten.
Ich möchte mit Hilfe einer Schleife eine Tabelle durchlaufen und alle Werte Meine Vorschläge hierfür:
Sub test()
Dim anfang As Integer
Dim ende As Integer
ende = Range("C655351").End(xlUp).Row
For anfang = 2 To ende
If Range("C" & anfang).Value 
()
bei dieser Variante wird nichts gelöscht.
Variante 2:
Dim loeschen As Range
Dim bereich As Range
Set bereich = Range("C:C")
For Each loeschen In bereich.Rows
If loeschen.Value Rows.Select
Selection.delete Shift:=xlUp
End If
Next loeschen
Hier wird scheinbar alles gelöscht.
Habt ihr Tipps für mich?
Vielen Dank + Viele Grüße
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: mit Schleife Tabelle durchlaufen, zeilen löschen
26.09.2017 21:25:04
Christian
... du must den Bereich von unten beginnend durchlaufen, also von unten weglöschen.
Gruß,
Christian
AW: mit Schleife Tabelle durchlaufen, zeilen löschen
26.09.2017 21:35:42
Christian
hier mal ein deiner Variante 1 umgesetzt (und das nicht notwendige Select-Zeugs rausgenommen).
Sub test2()
Dim anfang As Integer
Dim ende As Integer
ende = Range("C655351").End(xlUp).Row
For anfang = ende To 2 Step -1
If Range("C" & anfang).Value 
vg, Christian
Anzeige
AW: mit Schleife Tabelle durchlaufen, zeilen löschen
26.09.2017 21:38:45
Sepp
Hallo Jan,
1.: Schleifen die jede Zelle einzeln bearbeiten sind schnarchlangsam!
2.: Wenn du Zellen per Schleife löschst, musst du von unten nach oben arbeiten .
(For anfang = ende To 2 Step -1)
3.: Besser so.
Sub belowFifty()
Dim objRange As Range, lngEnd As Long
On Error GoTo ErrorHandler
Application.ScreenUpdating = False
With Sheets("Tabelle1")
  lngEnd = Application.Max(2, .Cells(.Rows.Count, 1).End(xlUp).Row)
  .Columns(1).Insert
  .Range(.Cells(2, 1), .Cells(lngEnd, 1)).Formula = "=IF(D2<50,1,"""")"
  If Application.Count(.Range(.Cells(2, 1), .Cells(lngEnd, 1))) > 0 Then
    Set objRange = .Range(.Cells(2, 1), .Cells(lngEnd, 1)).SpecialCells(xlCellTypeFormulas, 1)
    If Not objRange Is Nothing Then objRange.EntireRow.Delete
  End If
  .Columns(1).Delete
End With
ErrorHandler:
Application.ScreenUpdating = True
Set objRange = Nothing
End Sub

Gruß Sepp

Anzeige
AW: mit Schleife Tabelle durchlaufen, zeilen löschen
26.09.2017 23:29:03
Peter(silie)
Hallo,
ganz simple(sofern im Worksheet Code):
Sub DeleteRows()
Dim i, lRow As Long
lRow = Cells(Rows.Count, 3).End(xlUp).Row
For i = lRow To 2 Step -1
If Cells(i, 3).Value 

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Tabelle mit VBA durchlaufen und Zeilen löschen


Schritt-für-Schritt-Anleitung

Um mit einer Excel VBA Schleife mehrere Zeilen zu löschen, kannst du folgende Schritte befolgen:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den Editor zu öffnen.

  2. Erstelle ein neues Modul: Klicke mit der rechten Maustaste auf "VBAProject (DeinWorkbookName)", wähle EinfügenModul.

  3. Füge den Code ein: Kopiere den folgenden Code in das Modul:

    Sub DeleteRows()
       Dim i As Long, lRow As Long
       lRow = Cells(Rows.Count, 3).End(xlUp).Row
       For i = lRow To 2 Step -1
           If Cells(i, 3).Value < 50 Then
               Rows(i).Delete
           End If
       Next i
    End Sub
  4. Führe das Makro aus: Drücke F5, um das Makro auszuführen. Es löscht alle Zeilen in Spalte C, die einen Wert kleiner als 50 haben.


Häufige Fehler und Lösungen

  • Problem: Es werden keine Zeilen gelöscht.

    • Lösung: Stelle sicher, dass du die Schleife von unten nach oben durchläufst, um Zeilen zu löschen. Ändere For i = 2 To lRow zu For i = lRow To 2 Step -1.
  • Problem: Alle Zeilen werden gelöscht.

    • Lösung: Überprüfe die Bedingung im If-Statement. Stelle sicher, dass die Bedingung den korrekten Wert prüft.

Alternative Methoden

Wenn du eine andere Methode ausprobieren möchtest, um mit einer Excel VBA Schleife Zellen zu durchlaufen und mehrere Zeilen zu löschen, kannst du diese Option in Betracht ziehen:

Sub belowFifty()
    Dim objRange As Range, lngEnd As Long
    On Error GoTo ErrorHandler
    Application.ScreenUpdating = False

    With Sheets("Tabelle1")
        lngEnd = Application.Max(2, .Cells(.Rows.Count, 1).End(xlUp).Row)
        .Columns(1).Insert
        .Range(.Cells(2, 1), .Cells(lngEnd, 1)).Formula = "=IF(D2<50,1,"""")"

        If Application.Count(.Range(.Cells(2, 1), .Cells(lngEnd, 1))) > 0 Then
            Set objRange = .Range(.Cells(2, 1), .Cells(lngEnd, 1)).SpecialCells(xlCellTypeFormulas, 1)
            If Not objRange Is Nothing Then objRange.EntireRow.Delete
        End If

        .Columns(1).Delete
    End With

ErrorHandler:
    Application.ScreenUpdating = True
    Set objRange = Nothing
End Sub

Diese Methode fügt eine Hilfsspalte hinzu und löscht die Zeilen basierend auf den Formeln in der Hilfsspalte.


Praktische Beispiele

Hier sind einige Beispiele, wie du die Excel VBA Schleife über alle Zeilen nutzen kannst, um bestimmte Bedingungen zu prüfen und Zeilen zu löschen:

  1. Beispiel 1: Löschen von Zeilen mit leerem Wert in Spalte B:

    Sub DeleteEmptyRows()
       Dim i As Long, lRow As Long
       lRow = Cells(Rows.Count, 2).End(xlUp).Row
       For i = lRow To 2 Step -1
           If IsEmpty(Cells(i, 2).Value) Then
               Rows(i).Delete
           End If
       Next i
    End Sub
  2. Beispiel 2: Löschen von Zeilen, die einen bestimmten Text enthalten:

    Sub DeleteRowsWithText()
       Dim i As Long, lRow As Long
       lRow = Cells(Rows.Count, 1).End(xlUp).Row
       For i = lRow To 2 Step -1
           If Cells(i, 1).Value = "Löschen" Then
               Rows(i).Delete
           End If
       Next i
    End Sub

Tipps für Profis

  • Verwende Application.ScreenUpdating = False: Dies verbessert die Leistung, da Excel die Bildschirmaktualisierung während der Ausführung des Makros deaktiviert.
  • Fehlerbehandlung einbauen: Mit On Error GoTo kannst du sicherstellen, dass dein Makro auch bei unerwarteten Fehlern weiterläuft oder diese behandelt.
  • Teste deine Makros immer: Überprüfe zuerst in einer Sicherungskopie deiner Datei, um Datenverluste zu vermeiden.

FAQ: Häufige Fragen

1. Kann ich die Schleife anpassen, um nur bestimmte Zeilen zu löschen?
Ja, du kannst die Bedingung im If-Statement anpassen, um spezifische Kriterien festzulegen.

2. Wie kann ich die Zeilen nicht nur löschen, sondern auch in eine andere Tabelle verschieben?
Du kannst die Zeilen zuerst in eine andere Tabelle kopieren und dann die Originalzeilen löschen. Verwende Rows(i).Copy Destination:=Sheets("ZielTabelle").Rows(1).

3. Funktioniert dieser Code in allen Excel-Versionen?
Der bereitgestellte VBA-Code sollte in den meisten modernen Excel-Versionen (ab Excel 2007) funktionieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige