Forum: PC-Programmierung Arbeiten mit viel zu großen Exceldateien VBA Zeilen löschen


von Bärnd (Gast)


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

von never ever (Gast)


Lesenswert?

dreh den Spies doch um und exportiere die richtigen werte in eine neue 
Datei deines gewählten formates.

von Eddy C. (chrisi)


Lesenswert?

Daten exportieren, z.B. CSV, reduzieren/löschen, importieren?

von Keiner N. (nichtgast)


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

von Schwarzseher (Gast)


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.

von Bärnd (Gast)


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 :/

von Bärnd (Gast)


Lesenswert?

oh, die Antworten kamen aber schnell...
=> ich werde mich ranmachen

von Kolja L. (kolja82)


Lesenswert?

Nimm Pandas ;-)

von MaWin (Gast)


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)

von Bärnd (Gast)


Lesenswert?

Thema erledigt...
Danke :)

von Äxl (geloescht) (Gast)


Lesenswert?

Wie und womit? Was hast Du letzen Endes gemacht?

Bärnd schrieb:
> Thema erledigt...
> Danke :)

von Bärnd (Gast)


Lesenswert?

@Äxl

Export in eine neue csv

von c-hater (Gast)


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.

von Egon N. (egon2321)


Lesenswert?

Also ich persönlich würde ja einfach wie vorgeschlagen die Datei als CSV 
exportieren und die Daten dann in eine angemessene Datenbank wie 
PostgreSQL exportieren. Da kann man dann auch schön zwei Server für 
Backups koppeln...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.