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

Forumthread: Befehlt funktioniert nicht wie erwartet

Befehlt funktioniert nicht wie erwartet
20.03.2019 08:40:14
Luisa
Hallo,
Ich habe mal wieder ein für mich sehr komisches Problem. Ich habe eine Excel Tabelle mit Daten aus einer SAP Abfrage und möchte alle Zeilen löschen, bei denen in der ersten Spalte "AAAEDB" steht. Das ergibt für mich folgenden Befehl:

For introw = 1 To Tabelle1.Cells(Rows.Count, 1).End(xlUp).Row
If Cells(introw, 1).Value = "AAAEDB" Then Tabelle1.Rows(introw).Delete
Next
Interessanterweise löscht das aber nur ca. die Hälfte der Einträge. Wenn ich den Code nochmal starte löscht es wieder die Hälfte und immer so weiter. Kann sich jemand erklären, warum das so ist?
Danke und LG
Luisa
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Befehlt funktioniert nicht wie erwartet
20.03.2019 08:44:24
MCO
Guten Morgen Luisa!
Das ist so, weil zb die Zeile 5 beim löschen zu zeile 4 wird und das bei jedem löschvorgang.
Du mußt unten anfangen, dann hast du das problem nicht mehr.
For introw = Tabelle1.Cells(Rows.Count, 1).End(xlUp).Row to 1 step -1
Gruß, MCO
Anzeige
Danke!
20.03.2019 08:46:37
Luisa
Hallo,
Oh man... Da hätte ich ja auch selbst drauf kommen können :D Manchmal hat man einfach ein Brett vorm Kopf :D
Danke Dir und noch einen schönen Tag!
LG Luisa
AW: Befehlt funktioniert nicht wie erwartet
20.03.2019 08:47:26
Engelchen
Hallo Luisa,
meines Erachtens musst Du von hinten nach vorn löschen, d.h.
(ungetestet)
For introw = Tabelle1.Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
LG!
Engelchen
Anzeige
AW: Befehlt funktioniert nicht wie erwartet
20.03.2019 08:57:21
Daniel
Hi
naja, Zeilen einzeln per Schleife löschen ist langsam und aufwendig.
probier mal das:
with columns(1)
.replace "AAAEDB", True, xlwhole
.SpecialCells(xlcelltypeconstants, 4).EntireRow.Delete
End with
oder die Standardmethode zum schnellen löschen von Zeilen mit Bedingung, hierbei werden per Formel alle Zeilen, die gelöscht werden sollen mit 0 markiert und die anderen Zeilen mit ihrer Zeilennummer. Dann kann man über das Duplikate-Entfernen die Zeilen mit 0 löschen:
With Tabelle1.Usedrange
with .Columns(.Columns.Count + 1)
.FormulaR1C1 = "=IF(RC1=""AAAEDB"",0,Row())"
.Cells(1, 1).Value = 0
.EntireRow.RemoveDuplicates .Column, xlno
.ClearContents
end with
end with
Gruß Daniel
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige