Hilfe bei Excel-Macro - Zeilen löschen mit Falsch in Spalte R?

... komplette Frage anzeigen

4 Antworten

Sub NullzeilenAusblenden()
Dim rZelle As Range
For Each rZelle In Range("R1:R50000")
If Not IsEmpty(rZelle) And rZelle.Value = FALSCH Then rZelle.EntireRow.Delete
Next
End Sub

das entirerow.delete ohne =true

Die Bedingung müsste aber doch vermutlich "Falsch" sein, denn ohne Anführungszeichen wird auf eine Variable verwiesen.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von MrDuncan
17.02.2016, 12:28

Das falsch noch in "" setzen also "falsch" ?

0
Kommentar von Suboptimierer
17.02.2016, 12:37

Ich vermute, es muss auf  =False geprüft werden. Den Text FALSCH schreibt man selten in eine Zelle. Häufiger steht in der Zelle der Wahrheitswert.

1

Beim Löschen von Zeilen oder Zellen muss man meiner Erfahrung nach rückwärts vorgehen, das sonst immer die Zeile nach der gelöschten übersprungen wird (denn diese hat ja jetzt die gleiche Adresse, wie die gelöschte).
Außerdem muss auf false geprüft werden, da VBA Englisch "spricht".
SO müsste es eigentlich klappen:

Sub NullzeilenLöschen()
Dim row As Long
For row = 50000 To 1 Step -1
If Not IsEmpty(Cells(row, 18)) And Cells(row, 18).Value = False Then Cells(row, 18).EntireRow.Delete
Next row
End Sub

Oder?

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Suboptimierer
18.02.2016, 10:01

Super Tipp mit dem Rückwärtszählen! Das ist einfacher zu merken, als das i beim Vorwärtszählen anzupassen. (Man muss sich jedesmal überlegen, in welche Richtung i angepasst wird.)

In manchen Programmiersprachen (z. B. Object Pascal) kann man die Schleifenvariable gar nicht manipulieren.

Der Hinweis, row als Long deklarieren zu müssen ist auch äußerst wichtig und darf nicht untergehen.

1

Sub NullzeilenAusblenden() Dim rZelle As Range For Each rZelle In
Range("R1:R50000") If Not IsEmpty(rZelle) And rZelle.Value = FALSCH Then
_ rZelle.EntireRow.Delete Next End Sub

Habe die Formel jetzt wie oben abgeändert. Jetzt funktionierts! Aber ich muss den Macro immer fünfmal auslösen bis er mir alle Zeilen mit Falsch löscht... beim ersten Mal löscht er nicht alle... Hab ich vielleicht noch was vergessen?

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Suboptimierer
17.02.2016, 12:35

Du kannst mit dem Shiftargument von Delete experimentieren. Versuch mal xlDown. 

Wenn eine Zeile gelöscht wird, so wird die nächste Zelle zur aktuellen Zelle. Das ist die Krux. Die aktuelle Zelle wird nicht ein zweites Mal mittels For Each erfasst.

Alternative: Iteriere mit For i=1 to 50000 und passe das i nach einem Löschvorgang an.

0

Das funktioniert irgendwie nicht. Wenn ich das abändere kommt die Meldung Laufzeitfehler 424 - Objekt erforderlich

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?