Arbeiten mit viel zu großen Exceldateien VBA Zeilen löschen

Gast #5400475
Lesenswert?

Hi,

da hat mal wieder jemand Excel anstelle einer sauberen Datenbank 
zweckentfremdet. Aber leider muss ich jetzt hier das beste draus machen.

Ich habe hier ein Exceldokument mit ~30 Spalten und etwa 80000 Zeilen.
Ich muss bestimmte Zeilen mit einem bestimmten wert Löschen. Sortieren 
kann excel diese Datenmenge schon lange nicht mehr, also bleibt mir nur 
die Möglichkeit in VBA die Zeilen zu löschen.

Eine For-Schleife unr ein Delete-Befehl ist kein Problem, allerdings ist 
auch das "hochschieben" des Kompletten Datenblockes schon ein 
"ziemlicher" Aufwand. Also wenn ich z.B. zeile 3 Lösche, muss Excel ja 
die darunterliegenden 80000 Zeilen "hochschieben", damit keine Lücke 
entsteht.

Nun stellt sich die Frage, ob man das nicht "intelligenter" machen kann? 
Zwar gibt es einen Befehl, welcher Berechnungen unterbindet, diesen hab 
ich auch schon eingebaut, aber das ist noch nicht genau mein Problem.
> gibt es auch einen Befehl, welcher das "laden" der Arbeitsmappe unterbindet und 
erst zuletzt, wenn ich alle (etwa) 20000 Zeilen gelöscht hab. dann einmal Lädt?

Vielen Dank
#5400481
Lesenswert?

Moin,

wenn ich mal nicht an etwas hänge, dann zeichne ich mit dem Makro 
Recorder auf, was ich machen will und schaue mir dann den erzeugten Code 
an.

Da kommt dann so was raus
1
  Rows("8:8").Select
2
  Selection.Delete Shift:=xlUp

Zeile 8 Markieren, löschen und den Rest nach oben schieben. Das lässt 
sich noch auf ein
1
   Rows("8:8").Delete Shift:=xlUp

eindampfen
Gast #5400485
Lesenswert?

Bärnd schrieb:
> Ich habe hier ein Exceldokument mit ~30 Spalten und etwa 80000 Zeilen.
> Ich muss bestimmte Zeilen mit einem bestimmten wert Löschen. Sortieren
> kann excel diese Datenmenge schon lange nicht mehr

Nimm mal einen Rechner mit mehr RAM und 64bit. Hab schon Tabellen mit 
800.000 Zeilen und >60 Spalten sortiert, gefiltert, Teilsummen gebildet 
und Pivot-Tabellen drübergelegt. Ohne lange Kaffepausen.
Gast #5400487
Lesenswert?

meine 2. Idee war es mehrere Selects zu machen und dann einfach mehrere 
Zeilen gleichzeitig zu löschen.
Funktioniert auch wunderbar in einer kleinen Tabelle... aber in der 
großen kann ich nicht mal 2 Zeilen gleichzeitig löschen :/
Gast #5400519
Lesenswert?

Bärnd schrieb:
> Eine For-Schleife unr ein Delete-Befehl ist kein Problem, allerdings ist
> auch das "hochschieben" des Kompletten Datenblockes schon ein
> "ziemlicher" Aufwand. Also wenn ich z.B. zeile 3 Lösche, muss Excel ja
> die darunterliegenden 80000 Zeilen "hochschieben", damit keine Lücke
> entsteht.

Vor allem steigt der Aufwand quadratisch.

> Nun stellt sich die Frage, ob man das nicht "intelligenter" machen kann?

Klar.
Nur ein Mal von oben nach unten durch die Tabelle, ein Index zeigt auf 
die aktuell untersuchte Zeile, umkopiert zum nach oben schieben (ein 
zweiter Index nennt das Ziel, wird jeweils um die Länge des Blocks der 
zu erhaltenen Zeilen erhöht) wird nur jeweils der stehen gelassene 
Bereich von der letzten als löschbar bewerteten Zeile bis zur neuen als 
löschbar bewerteten (oder dem Ende der Tabelle). So wird jede erhaltene 
Zeile nur ein Mal umkopiert, der Aufwand bleibt linear.

Sonderbehandlung ist nötig zum löschen (ausblanken) der übrigen Zeilen 
zwischen der letzten an ihren Zielort hinkopierten und der alten 
Tabellenlänge, und bei den ersten erhaltenen Zeilen vor der ersten zu 
löschenden, die gar nicht umkopiert werden (der Block word am Ende durch 
die beiden Indexe matkiert)
Gast #5401187
Lesenswert?

Bärnd schrieb:

> da hat mal wieder jemand Excel anstelle einer sauberen Datenbank
> zweckentfremdet. Aber leider muss ich jetzt hier das beste draus machen.

Was hindert dich daran, den Excel-Kram in eine DB zu exportieren, dort 
nach Herzenlust zu bearbeiten und dann zu reimportieren? Dazu muss man 
nicht eine Zeile Code schreiben, sondern einfach nur SQL Server Express 
installieren (die Variante mit den Verwaltungstools) und dann das 
mächtigste eben jener Verwaltungstools benutzen. Damit kannst du fast 
den ganzen Kram in Klickibunti abhandeln...

> Sortieren
> kann excel diese Datenmenge schon lange nicht mehr

Neuzeitliches Excel 64Bit auf einem 64Bit-OS verwenden und schon geht 
das problemlos. Sogar noch viel mehr als diese lächerlichen 80000 
Zeilen. Unsere Kunden werten die Datenbestände unserer DBs allesamt mit 
Excel aus. Da kommt es, je nach Abfrageumfang, auch schonmal zu 
Ergebnismengen mit einigen Millionen Datensätzen. OK, die zu sortieren 
oder zu filtern macht mit Excel wegen der Wartezeiten dann nicht mehr 
wirklich Spaß, aber funktionieren tut das durchaus noch.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren