AW: Zeile löschen, wenn Wert nicht vorhanden
20.11.2021 07:44:39
Oberschlumpf
Hi Stephan
willst du wirklich Zeilen löschen oder Zellen?
Du schreibst "...alle anderen Zeilen löschen"
Aber der Befehl...
ws.Range("B2").Offset(i, 0).Delete
...löscht nur die jeweilige Zelle in Spalte B
Und egal, ob Zeilen oder Zellen gelöscht werden, die unter dem gelöschten Element stehenden Werte rutschen nach dem Löschen eine Zeile höher.
Somit muss beim Löschen von Zeilen oder Zellen mit dem Überprüfen in der letzten, benutzen Zeile begonnen werden und nicht in der ersten Zeile.
Und der Befehl...
If Not ws.Range("B2").Offset(i, 0).Value Like "*11*" Then
...gibt auch dann WAHR zurück und führt zum Lösch-Befehl bei z Bsp diesen Datumswerten:
11.03.2022
11.09.2020
Mit obigem Befehl wird geprüft, ob ein Wert die Zahl 11 enthält - egal, an welcher Stelle 11 steht...z Bsp auch 01.01.1911 würde nicht gelöscht werden.
Somit solltest du den Datumswert auch wirklich nur auf den Monat 11 überprüfen (was du ja eigentlich auch erreichen wolltest...vermute ich :-) )
Versuch es mal mit diesem Code:
Sub Test()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Tabelle1")
Dim i As Long
'For i = ws.Cells... beginnt in der letzten Zeile von Spalte A...
For i = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row To 2 Step -1
'... und prüft die Werte in Spalte B
If Month(ws.Range("B" & i).Value) 11 Then
'der nächste Befehl löscht nur die Zelle
ws.Range("B" & i).Delete
'der nächste Befehl löscht die ganze Zeile
'ws.Rows(i).Delete
End If
Next
End Sub
Hilfts?
Ciao
Thorsten