Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
912to916
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
912to916
912to916
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

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

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

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

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige