PDA

Vollständige Version anzeigen : Zeilen löschen dauert immer länger


naro
02.03.2004, 14:21
Hallo,

ich habe folgendes Problem:

Ich habe in einer Datei ein Makro (excel 2002) programmiert, dass 13000 Datensätze (untereinander in Zeilen geschrieben) auf ihre Richtigkeit überprüft. Passt irgendetwas nicht, soll die entsprechende Zeile gelöscht werden. Das funtkioniert auch soweit. Am Anfang geht das Löschen korrekt und dauert auch nur eine Sekunde. Aber um so mehr Zeilen gelöscht wurden, umso länger wird der Löschvorgang. Gegen Ende dauert das Löschen einer Zeile bis zu zwei Minuten. Weiß irgendjemand einen Grund dafür ? Ansonsten laufen keine Programme ab, die CPU-Nutzung bleibt aber beim Zeilenlöschen permanent auf 100%.

Vielen Dank.

naro

For s = 2 To e ''Fehlerhafte Datensätze löschen
If IsEmpty(Cells(s, 1)) And IsEmpty(Cells(s, 2)) _
And IsEmpty(Cells(s, 3)) Then Exit For
If (Not Cells(s, 1).NumberFormat = "m/d/yy" And _
Not Cells(s, 1).NumberFormat = "m/d/yyyy" And _
Not Cells(s, 1).NumberFormat = "dd/mm/yy;@") Or _
IsEmpty(Cells(s, 1)) Or _
IsEmpty(Cells(s, 2)) Or _
IsEmpty(Cells(s, 3)) Or _
Len(Cells(s, 1)) <> 10 Or _
Not Mid(Cells(s, 1), 3, 1) = "." Or _
Not Mid(Cells(s, 1), 6, 1) = "." Or _
Cells(s, 1) > Now() Or _
Cells(s, 1) = Date Then
Rows(s).Select
Selection.Delete Shift:=xlUp
s = s - 1
End If
Next

Hajo_Zi
02.03.2004, 14:25
Hallo Naro

select, Activate usw. ist in VBA zu 99% nicht notwendig

Rows(s).Delete

<img src="http://home.media-n.de/ziplies/images/grusz.gif" align="middle" height="40" alt="Grußformel">
Bitte keine Mail, Probleme sollten im Forum gelöst werden.
Microsoft MVP für Excel
<span style=" font-weight:bold;">Das Forum lebt auch von den R&uuml;ckmeldungen.</span>
Betriebssystem XP Pro und Excel Version XP Pro
<a href="http://home.media-n.de/ziplies/" target="_blank">
<img border="0" src="http://home.media-n.de/ziplies/images/logo_hajo.gif" align="middle" height="40" alt="Homepage"></a>

naro
02.03.2004, 14:36
Hallo Hajo,

erst einmal Danke für den Tipp. Aber leider bringt er mir bei meinem Problem jetzt nichts. Ich habe es gerade ausprobiert: Das Löschen dauert immer noch ewig lange.

Hast Du vielleicht noch eine andere Idee?

Danke!

naro

Hajo_Zi
02.03.2004, 14:42
Hallo naro

am schnellsten geht das löschen wie folgt

Sub Leerzeilen_Löschen2()
' Zeilen löschen wo Spalte A leer
Range("A1:A" & ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub

<img src="http://home.media-n.de/ziplies/images/grusz.gif" align="middle" height="40" alt="Grußformel">
Bitte keine Mail, Probleme sollten im Forum gelöst werden.
Microsoft MVP für Excel
<span style=" font-weight:bold;">Das Forum lebt auch von den R&uuml;ckmeldungen.</span>
Betriebssystem XP Pro und Excel Version XP Pro
<a href="http://home.media-n.de/ziplies/" target="_blank">
<img border="0" src="http://home.media-n.de/ziplies/images/logo_hajo.gif" align="middle" height="40" alt="Homepage"></a>

naro
02.03.2004, 15:33
Hallo Hajo,

nochmal vielen Dank. Du bist ja ganz schön flott im Antworten. Ich habe Deinen Tipp jetzt zwar nicht übernommen, aber Du hast mich damit auf die entscheidende Idee gebracht. Ich filter jetzt einfach erstmal alle Datensätze, die irgendwo ein leeres Feld haben heraus und prüfe dann nur noch den Rest mit den genaueren Kriterien. Da da dann nicht mehr so viele Zeilen zu löschen sind, ist die Zeit kein so großes Problem mehr.

Nochmal vielen Dank und noch einen schönen Tag !

naro