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
dreh den Spies doch um und exportiere die richtigen werte in eine neue Datei deines gewählten formates.
Daten exportieren, z.B. CSV, reduzieren/löschen, importieren?
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
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.
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 :/
oh, die Antworten kamen aber schnell... => ich werde mich ranmachen
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)
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.