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

Zeilen löschen

Forumthread: Zeilen löschen

Zeilen löschen
03.10.2007 12:36:00
DieterG
Hallo zusammen,
braue mal wieder Euere Hilfe.
Ich habe eine Excel_Datei mit mehr als 10000 Zeilen.
Wie lassen sich per VBA alle Zeilen löschen, wenn in Spalte A in einer Zelle ein Satz mit einem bestimmten Wort z.B. "Abschnitt" vorkommt?
Danke im voraus
Gruss Dieter

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Zeilen löschen
03.10.2007 12:51:00
Christian
Hallo Dieter

Option Explicit
Sub DeleteRow()
Dim i as long
Application.ScreenUpdating =False
With Sheets("Tabelle1")
For i = .Cells(Rows.Count, 1).End(xlUp).Row to 1 Step -1
If .Cells(i, 1) = "Abschnitt" Then .Rows(i).Delete
Next
End With
Application.ScreenUpdating = True
End Sub


Gruß
Christian

Anzeige
AW: Zeilen löschen
03.10.2007 13:01:00
Jan
Option Explicit

Sub DeleteRow()
Dim i as long
Application.ScreenUpdating =False
With Sheets("Tabelle1")
For i = .Cells(Rows.Count, 1).End(xlUp).Row to 1 Step -1
If .Cells(i, 1) Like "*Abschnitt*" Then .Rows(i).Delete
Next
End With
Application.ScreenUpdating = True
End Sub


mfg Jan

Anzeige
jo, da hast du recht o.T.
03.10.2007 13:07:09
Christian

AW: Zeilen löschen - geht auch in Schnell
03.10.2007 22:28:00
Daniel
Hallo
probier mal das Makro hier, das ist bei mir c.a. 20x schneller als die Schleife von Christian und Jan (getestet mit 10000 Zeilen, von denen 1000 gelöscht werden müssen):

Sub löschen1()
Columns(1).Insert
With Range(Cells(1, 2), Cells(65536, 2).End(xlUp)).Offset(0, -1)
.FormulaR1C1 = "=if(rc2=""Abschnitt"", true, row())"
.Formula = .Value
.EntireRow.Sort key1:=Cells(1, 1), order1:=xlAscending, header:=xlNo
.SpecialCells(xlCellTypeConstants, 4).EntireRow.Delete
.EntireColumn.Delete
End With
End Sub


Falls du kurzen Code bevorzugts, kannst du auch das hier verwenden: (ist aber eher langsam, in etwa so wie die Schleife, außderdem kann es passieren, daß es bei sehr grossen Datenmengen nicht mehr korrekt funktioniert)


Sub löschen3()
With Columns(1)
.AutoFilter Field:=1, Criteria1:="Abschnitt"
.SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With
End Sub


wenn die Sortierung der Daten verändert werden darf, oder du einen Schlüssel hast, nach dem du wieder zu zurücksortieren kannst, kannst du auch diesen Code verwenden, der ist kurz und noch einmal mehr als doppelt so schnell wie meine erster vorschlag (also c.a. Faktor 40 gegenüber der Schleife), außerdem sollte es keine Probleme bei sehr grossen Datenmengen geben:


Sub löschen3()
With Columns(1)
.EntireRow.Sort key1:=Cells(1, 1), order1:=xlAscending, header:=xlNo
.AutoFilter Field:=1, Criteria1:="Abschnitt"
.SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With
End Sub


Gruß, Daniel

Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige