Microsoft Excel

Herbers Excel/VBA-Archiv

Zeilen aus Range löschen, wenn Bedingung erfüllt

Betrifft: Zeilen aus Range löschen, wenn Bedingung erfüllt von: Peter
Geschrieben am: 04.06.2013 12:06:44

Guten Tag
Mit untenstehendem Code lösche ich gewisse Zeilen, wenn diese in einmem String auf der gleichen Zeile eine bestimmte Bedingung erfüllen.
Das funktioniert so lange, bis die Bedingung auf der zweitletzten Zeile und der letzten Zeile zutrifft. Dann wird die letzte Zeile nicht gelöscht.

Wie kann ich das Problem lösen?

Gruss, Peter

For Each rngZelle In Range("Bereich_9")
If Mid(rngZelle.Offset(0, 1), 6, 1) = "/" _
And Left(rngZelle.Offset(0, 1), 5) = "20806" _
Or Left(rngZelle.Offset(0, 1), 5) = "20807" _
Or Left(rngZelle.Offset(0, 1), 5) = "20808" _
Or Left(rngZelle.Offset(0, 1), 5) = "20816" _
Or Left(rngZelle.Offset(0, 1), 5) = "20817" _
Or Left(rngZelle.Offset(0, 1), 5) = "29999" Then
rngZelle.EntireRow.Delete
GoTo Weiter
End If
Weiter:
Next

  

Betrifft: AW: Zeilen aus Range löschen, wenn Bedingung erfüllt von: Rudi Maintaire
Geschrieben am: 04.06.2013 12:34:19

Hallo,
Zeilen immer von unten löschen.

Gruß
Rudi


  

Betrifft: AW: Zeilen aus Range löschen, wenn Bedingung erfüllt von: Luschi
Geschrieben am: 04.06.2013 16:03:45

Hallo Peter,

im Grunde hat Rudi Recht, aber einen definierten Bereich kann man nicht so ohne weiteres von unten nach oben durchlaufen. Selbst der Bereich Range("A30:A2") wird von Excel umgedreht zu Range("A2:A30").
Deshalb mache es so:

Dim rngLoeschen As Range

For Each rngZelle In Range("Bereich_9")
   If Mid(rngZelle.Offset(0, 1), 6, 1) = "/" _
      And Left(rngZelle.Offset(0, 1), 5) = "20806" _
      Or Left(rngZelle.Offset(0, 1), 5) = "20807" _
      Or Left(rngZelle.Offset(0, 1), 5) = "20808" _
      Or Left(rngZelle.Offset(0, 1), 5) = "20816" _
      Or Left(rngZelle.Offset(0, 1), 5) = "20817" _
      Or Left(rngZelle.Offset(0, 1), 5) = "29999" Then
      'erst alle Laufzellen mit gültiger Bedingung sammeln
      If rngLoeschen Is Nothing Then
         Set rngLoeschen = rngZelle
      Else
         Set rngLoeschen = Union(rngLoeschen, rngZelle)
      End If
    Else
      'irgendwasanderes
    End If
Next
If Not rngloschen Is Nothing Then
   rngLoeschen.EntireRow.Delete xlShiftUp
End If

Set rngLoeschen = Nothing
Gruß von Luschi
aus klein-Paris


  

Betrifft: AW: Zeilen aus Range löschen, wenn Bedingung erfüllt von: Peter
Geschrieben am: 04.06.2013 16:58:11

Hallo Rudi
Hallo Luschi

Vielen Dank für die Antworten.

Ich haben den Beitrag von Luschi etwas später gesehen und habe daher die Antwort von Rudi wie folgt umgesetzt:

Set rngV9 = ThisWorkbook.Sheets("KHXZ").Range("Bereich_9")

With rngV9
For i = rngV9 .Rows.Count To 1 Step -1

If Mid(.Cells(i, 1).Offset(0, 1), 6, 1) = "/" _
And Left(.Cells(i, 1).Offset(0, 1), 5) = "20806" _
Or Left(.Cells(i, 1).Offset(0, 1), 5) = "20807" _
Or Left(.Cells(i, 1).Offset(0, 1), 5) = "20808" _
Or Left(.Cells(i, 1).Offset(0, 1), 5) = "20816" _
Or Left(.Cells(i, 1).Offset(0, 1), 5) = "20817" _
Or Left(.Cells(i, 1).Offset(0, 1), 5) = "20818" Then
.Cells(i, 1).EntireRow.Delete
GoTo Weiter
End If
Weiter:
Next
End With

Die Variante von Luschi finde ich auch interessant - werde mir das merken.

Vielen Dank und Gruss, Peter


 

Beiträge aus den Excel-Beispielen zum Thema "Zeilen aus Range löschen, wenn Bedingung erfüllt"