Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
988to992
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
988to992
988to992
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Rows delete

Rows delete
23.06.2008 21:15:40
Gregor
Hallo
Ich benutze manchmal den Code Rows(i).delete.
ZB.
For i = 1000 to 1 Step -1
If Cells(i, 1) = "" Then Rows(i).delete
Next
Entweder geht dieser Code ellenlang oder meistens bleibt Excel sogar hängen. Gibt es eine andere Lösung?
Vielen Dank
Gregor

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Rows delete
23.06.2008 21:18:00
Hajo_Zi
Hallo Gregor,

Sub Spalte_A_Leer()
'   von NoNet
Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub



AW: Rows delete
23.06.2008 21:37:10
Daniel
Hi
die schnellste mir bekannte Methode ist folgende:

Columns(1).insert
with range("A1:A" & cells(rows.count,1).end(xlup).row)
.formulalocal="=wenn(B1="""";"""";Zeile())
.formula = .value
.entirerow.sort Key1:=Range("A1"), header:=xlno
.specialcells(xlcelltypeblanks).entirerow.delete
.entirecolumn.delete
end with


der Code funktioniert in Sekunden, auch in Tabellen mit 60.000 Zeilen
Gruß, Daniel

Anzeige
AW: Rows delete
24.06.2008 10:37:00
Gregor
Vielen Dank
Die 1. Lösung klappt bestens, bei der 2. erhalte ich eine Fehlermeldung wegen überlappenden Markierungen.
Gibt es auch eine Lösung, um schnell Zeilen zu löschen mit einem bestimmten Wert/Ausdruck:
ZB
If Cells(i, 1) = 7 Then Rows(i).delete
oder
If Cells(i, 1) = "Gregor" Then Rows(i).delete
Danke und Gruss
Gregor

AW: Rows delete
24.06.2008 10:48:11
Hajo_Zi
Hallo Gregor,
was ist mit der Lösung im anderem Beitrag. Bei der Aufgabenstellung kann man es wahrscheinlich nicht mehr beschleunigen.
Gruß Hajo

Anzeige
AW: Rows delete
24.06.2008 16:34:00
Gregor
Hajo
Wie gesagt, die 1. Lösung (dein Vorschlag) klappt bestens. Die Leerzellen kann ich damit bestens lösen. Oftmals muss ich jedoch auch Zeilen mit einem bestimmten Wert löschen, die mit dem Code Rows delete ebenfalls Probleme schaffen.
Gregor

AW: Rows delete
24.06.2008 22:31:41
Daniel
Hallo
sorry ich hatte nen kleinen Fehler drin, so sollte es funktionieren:

Sub löschen()
Columns(1).Insert
With Range("A1:A" & Cells(Rows.Count, 2).End(xlUp).Row)
.FormulaLocal = "=wenn(B1="""";"""";Zeile())"
.Formula = .Value
.EntireRow.Sort Key1:=Range("A1"), header:=xlNo
.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
.EntireColumn.Delete
End With
End Sub


deine anderen Anfordrungen kannst du einfach einbauen, wenn du diese Zeile entsprechend änderst


.FormulaLocal = "=wenn(B1="""";"""";Zeile())"


zum beispiel so:


.FormulaLocal = "=wenn(B1=7;"""";Zeile())"
.FormulaLocal = "=wenn(B1=""Gregor"";"""";Zeile())"
.FormulaLocal = "=wenn(Oder(B1=""Gregor"";B1=7);"""";Zeile())"


um alle Zeilen zu löschen, die entweder "Gregor" oder 7 als Wert haben.
grosser Vorteil dieser Methode ist, du kannst die Formel, die die zu Löschenden Daten kennzeichnet, erstmal unabhängig vom Makro entwickeln und Ausprobieren (könnte ja mal ne komplexere Bedingung sein).
Da die Daten ja erstmal nur gekennzeichnet und nicht gelöscht werden, kannst du immer erst das Ergebnis kontrollieren, bevor du tatsächlich Daten löscht und im Falle eines Fehlers die Daten erst aufwendig wiederherstellen musst.
Gruß, Daniel

Anzeige
Danke
25.06.2008 08:40:36
Gregor
Hallo Daniel
Eine sehr interessante Lösung, vielen herzlichen Dank.
Gregor

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige