Hallo Brille,
Also Prinizp ist, dass du alle die mit 3 beginnen in die
Hilfsspalte ein X schreibst und dann alle die dort einen Wert
enthalten löschst, oder?
nein, genau anders rum
Gehe in den Editor zum/in den Code, drücke nacheinander F8.
Vor/nach jedem F8-Druck kannste in der Tabelle beobachten was da in X geschieht.
Kannst bei sowas auch zwei Fenster einrichten, einmal die tabelle, einmal den Editor.
Was ist „With“? Oder besser worin ist der Unterschied zu loop
Loop ist wie For eine Schleife. D.h. je nach Bedingungen werden die befehle in der Schleife oftmals dzuchlaufen.
With ist da anderst. Es sagt nur daß alle Befehle die in der With-Schleife stehen sich auf das Objekt beziehen was nach With steht.
Die Befehle die das machen sollen müssen vor sich einen Punkt haben.
Befehele ohne Punkt werden behandelt als wenn sie außerhalb der Wioth-Schleife stünden.
Nachfolgend noch Hilfen im Code.
Du hast einen Grundsatzfehler in deinem Code.
Zeilen löscht man grundsätzlich von unten nach oben.
Bei deiner Variante kommt Vba mit den Zeilennummern anscheinend durcheinander. Man kann natürlich auch von oben nach unten löschen, aber nach jeder Zeilenlöschung muß man dann die Zeilennummer im Code korrigieren.
Siehe dazu die beiden Kurzcodes unten.
Schreib dazu in A1:A10 die Zahlen 1-10 und teste dann den einen Code, dann das Glaiche nochmal für den zweiten Code.
Gruß
Reinhard
Sub Loesch()
Dim Zei As Long
' Specialcells bringt Fehler wenn keine leeren Zellen gefunden
' mit dem Befehl wird dieser Fehler ignoriert
On Error Resume Next
'letzte benutzte zelle in A
Zei = Cells(Rows.Count, 1).End(xlUp).Row
'Bildschirmaktualisierung Aus
Application.ScreenUpdating = False
'manuelle Berechnung Ein
Application.Calculation = xlCalculationManual
'die Punkte vor den Befehlen in der With-Schleife referenzieren auf diesen Bereich
With Range("X2:X" & Zei)
.FormulaLocal = "=WENN(LINKS(A2;1)=""3"";"""";1)"
'entspricht Strg+C dann Bearbeiten--Inghalte einfügen---Werte
'also in Zellen werden die Formeln gelöscht und das Formelergebnis als Wert reingeschrieben
.Value = .Value
'Löschen im Bereich alle Zeilen wo in X nix steht
.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
'Inhalt der Hilfsspalte wird gelöscht
.ClearContents
End With
'automatische Berechnung Ein
Application.Calculation = xlCalculationAutomatic
'Bildschirmaktualisierung Ein
Application.ScreenUpdating = True
End Sub
Sub Falsch()
Dim Zei As Long
For Zei = 1 To 10
If Range("A" & Zei).Value "" Then
Range("A" & Zei).EntireRow.Delete
End If
Next Zei
End Sub
Sub Richtig()
Dim Zei As Long
For Zei = 10 To 1 Step -1
If Range("A" & Zei).Value "" Then
Range("A" & Zei).EntireRow.Delete
End If
Next Zei
End Sub