Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
232to236
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
232to236
232to236
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Leere Zeilen SCHNELL löschen

Leere Zeilen SCHNELL löschen
24.03.2003 08:25:09
Markus
Hi,

folgendes Problem.
ich lasse in einem langen Makro mit DB-Zugriff etc. an Ende eine Teileregbnisse Gruppierung machen. danach stehen die Daten in denersten 100er von Zeilen, aber leider steht GESAMTEREGBNIS der Subtotals etwa in Zeile 14.000 (14.000), das ist natürlich für den Ausdruck verheerend. Grund dafür, warum sich Teilergebnisse so seltsam verhält kann ich nicht sagen.

Also brauche ich ein Stück VBA Code, dass die leeren 12.000 Zeilen zwischen den echten Daten am Anfang und der gesamtergebnis Zeile schnell löscht.
Ich habe das unten versucht, geht auch, ist aber viel zu lansgam, braucht 10 min. für 9.000 Zeilen.
Weiss jemand, wie das schneller geht? Etwa indem man einfach alle leeren Zeilen zwischen der letzten Datenzeile und der Zeile mit Gesamtergebnis komplett markiert (sind zusammenhängend) und auf einen Schlag löschen kann?

Code (zu lahm):


Sub LeereZeilenlöschen()

Sheets("Daten").Select

' bestimme letzte Zeile mit Daten
LetzteZeile = ActiveSheet.UsedRange.Rows.Count
' Application.ScreenUpdating = False

' gehen von letzter Zeile rückwärts bis oben durch.

For durchlauf = LetzteZeile To 3 Step -1
' Wenn Zeile leer, löschen
If Application.CountA(Rows(durchlauf)) = 0 Then Rows(durchlauf).Delete
Next durchlauf

End Sub

markus


19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: Leere Zeilen SCHNELL löschen
24.03.2003 09:06:56
Nike

Hi,
wie wäre es zuvor zu sortieren und dann die letzte gefüllte
Zelle zu ermitteln und bis dahin in einem Rutsch zu löschen...

Für die letzte gefüllte Zelle bitte mal das Archiv bemühen ;-)

Bye

Nike

Re: Leere Zeilen SCHNELL löschen
24.03.2003 10:16:13
Markus

Hallo,

soweit ist das schon gemacht. Leider werden die Zeilen mit Gesamteregbnis nicht mit sortiert. Ausserdem arbeite ich da schon mit der letzten gefüllten Zeile, was aber leider zu langsam ist.

Markus



Re: Leere Zeilen SCHNELL löschen
24.03.2003 11:18:12
Nike

Hi,

zeig mal mehr Code, wenn du kannst.

Bye

Nike

Re: Leere Zeilen SCHNELL löschen
24.03.2003 11:23:38
Markus

Hallo Nike,
Code für was?
S. oben für den der die leeren Zeilen zu langsam löscht.

Die Gesamtergebnisse werden über ein Makro gemacht, der Code ist aber über einen Makro-recorder gemacht worden.

markus

Anzeige
Re: Leere Zeilen SCHNELL löschen
24.03.2003 11:38:44
Nike

Hi,
ich kann mir nicht vorstellen, das der Teil deines
Code wirklich sooo lange dauern kann.
Der Hund liegt bestimmt wo anders begraben ;-)
Application.screenupdating und so weiter hattest du ja
de/aktiviert...
Hm und ohne select dürfte das eigentlich schnackeln.

Vielleicht liegt`s eher am Import oder der Datenaufbereitung?

Bye

Nike

Re: Leere Zeilen SCHNELL löschen
24.03.2003 11:48:47
Markus

Hallo,

ich habe es mir im debugger angesehen, was er so macht, er braucht eben wirklich lange. Überrascht mich auch, aber ich habe keine Fehler gefunden, der irgendwie alles langsam macht.
Wie gecshrieben: der braucht für 9.000 Zeilen über 9 min. und das geht dann nicht.

Markus


Anzeige
Re: Leere Zeilen SCHNELL löschen
24.03.2003 11:54:10
Nike

Hi,
sind da in dem Blatt ggf. Funktionen drinn?
Wenn ja, stell mal die Berechnung auf manuell
und dann wieder zurück...
erst
Application.Calculation = xlCalculationManual
dann löschen ohne Ende...
und dann
Application.Calculation =xlCalculationAutomatic

Bye

Nike

Re: Leere Zeilen SCHNELL löschen
24.03.2003 11:57:56
Markus

Hi Nike,

danke für den Tipp ... aber es sind keine Funktionen drinnen.
markus

Re: Leere Zeilen SCHNELL löschen
24.03.2003 12:14:13
Nike

Hi,
könnte es sein, das er mit used Range viel tiefer
ansetzt, als der tatsächliche Bereich, in dem sich auch
wirklich Daten befinden?

Bye

Nike

Re: Leere Zeilen SCHNELL löschen
24.03.2003 12:19:41
Markus

Hi,

nein, habe ich eben nocheinmal kontrolliert, er landet wirklich auf der letzten Zeile, in der GESAMTEREGBNIS steht und geht dann von dort nach oben, löscht eine Zeile, löscht noch eine Zeile, löscht noch eine Zeile.
Während ich das hier schreibe, fällt mir aber auf: Kann es sein, dass er die Gruppierung nach Teleregbnissen dabei immer wieder neu erstellt?
Keine Ahnung, wie ich das feststellen, oder abstellen kann, aber das könnte es sein.
Ich lasse den Code jetzt nocheinmal auf einem Blatt ohne Teilergebnisse laufen mit sehr vielen Zeilen und sehe mal, was passiert.


Markus


Anzeige
Re: Leere Zeilen SCHNELL löschen
24.03.2003 12:32:07
Markus


Hallo,

hab nochmal kontrolliert und in einem neuen Ecel Blatt ohne Formel etc. laufen lassen, braucht auch elend lange min.:

Sub LeereZeilenlöschenA()
Cells(12000, 2) = "Hier geht es los"

For t = 1 To 100
Cells(t, 3) = "Data"
Next t

Sheets("Tabelle1").Select

LetzteZeile = ActiveSheet.UsedRange.Rows.Count
Application.ScreenUpdating = False

For durchlauf = LetzteZeile To 3 Step -1
If Application.CountA(Rows(durchlauf)) = 0 Then Rows(durchlauf).Delete
Next durchlauf


End Sub

Re: ich hab geschlafen
24.03.2003 14:16:14
Nike

Hi,
ich hab geschlafen, du nüdelst da doch immer
wieder ne Funktion durch(counta())
kein Wunder das das so lange braucht!!!

Berechne den Krempel in ner Hilfsspalte
und fahr dann über die Hilfsspalte...

Bye

Nike



Anzeige
Re: ich hab geschlafen
24.03.2003 14:47:05
Markus

Hi,

ud ich erst.
Habe andere "Methode" um zu bestimmen, ob Zeile leer ist (primitiv Cells(DurhclaufZeile, 3) ="" THEN ...) und es läuft SO VIEL schneller, das es jetzt wirklich geht.
VIELEN Dank!

Markus

Andere Lösung ?
24.03.2003 20:08:13
WernerB.

Hallo Markus,

das nachstehende Makro ist "sauschnell", weil es alle Leerzeilen "auf einen Schlag" eliminiert.
Allerdings sollten innerhalb des oberen Datenbereiches (speziell in der unteren Zeile) keine leeren Zellen vorkommen, sonst besteht die Gefahr, dass solche Zeilen mitgelöscht werden.
Wenn es also innerhalb des oberen Datenbereichs keine leere Zellen gibt, so kannst Du das Makro unbesorgt einsetzen.
Natürlich musst Du das Makro ggf. noch anpassen (nur die Spaltennummer!).

Viel Erfolg wünscht
WernerB.

Anzeige
Re: Andere Lösung ?
25.03.2003 08:19:29
Nike

Moin,
vielleicht is es einfach noch zu früh für mich aber ich
seh aus dem Code eigentlich eher, das der Bereich
gelöscht wird, der gerade den letzten Wert hat, bis zu dem Bereich darüber, wo wieder keine Werte drinn sind, oder
irr ich mich?
Ich glaub ich brauch erst mal ne Tasse Kaffee ;-)

Bye

Nike

Re: Andere Lösung ?
25.03.2003 19:41:11
WernerB.

Hallo Nike,

ob Dir eine Tasse Kaffee hilft, weiß ich nicht – vielleicht wäre eine Dusche mit eiskaltem Wasser ja gesünder und wirkungsvoller!
Wie heißt es so schön: Probieren geht über Studieren! Warum testest Du den Code nicht erst mal, bevor Du hier eine derartig abenteuerliche Code-Interpretation von Dir gibst (der "Versuchsaufbau" ist doch relativ einfach zu machen)?

Ich bin davon ausgegangen, dass im oberen Teil der Tabelle irgendwelche Datensätze stehen (z.B. von Zeile 1 bis Zeile 20) und erst viel weiter unten (z.B. in Zeile 15000) das "Gesamtergebnis" steht; dazwischen (also von Zeile 21 bis Zeile 14999) sind Leerzeilen, die gelöscht werden sollen.
Mein Makro ermittelt nun die "Gesamtergebnis"-Zeilennummer (hier: laR1 = 15000) und die letzte Zeile des oberen Datensatz-Bereiches (hier: laR2 = 20) und löscht anschließend die Zeilen 21 bis 14999 auf einen Schlag.
Was ist daran falsch?

Wenn ich mit meiner Probleminterpretation völlig daneben liegen sollte, so ziehe ich hiermit alle meine diesbezüglichen Beiträge zurück und werde mir wohl selbst eine kalte Dusche verabreichen müssen ...


MfG
WernerB.

Anzeige
Re: Andere Lösung ?
25.03.2003 20:22:47
Markus

Hallo Werner,

ob Dusche oder nicht - nur die Ruhe, die Problembeschreibung ist absolut korrekt.
Ob der Code auch tut, was er verspricht, bekomme ich morgen raus (habe im Moment keinen Zugriff auf die Daten) und poste es dann.
Danke für Deine Mühe,

Markus

Re: Andere Lösung ?
26.03.2003 09:13:16
Markus

Hallo,

habe eben mit meinen Daten ausprobiert:
leider wird zu viel gelöscht, es verschwindet auch die letzte Zeile mit dem Teilergebnis.
Meiner Meinung kommt der Code ins Schwimmen, weil Teilergebnis in einer anderen Spalte steht als Gesamtergebnis und auch Gesamtergebnis kommt am Ende in mehreren Zeilen untereinander in mehreren Spalten vor.
Trotzdem Danke, werde das als Anregung für anderen Fälle sehr gut brauchen können.

Markus


Anzeige
Re: Leere Zeilen SCHNELL löschen
28.03.2003 13:07:07
Dirk

Hallo Markus,

wenn Du nicht alle Spalten belegt hast, kannst Du die 1. Spalte mit einer Nummerierung belegen, das Ganze dann nach der 2. Spalte absteigend sortieren (alle Leerzeilen sind dann am Ende). Dann braucht nur noch alles ab der ersten Leerzeile gelöscht und nach Spalte 1 aufsteigend sortiert werden. Spalte 1 wird nun nicht mehr benötigt und kann gelöscht werden. Fertig!

Gruß, Dirk

Sub LLZ()
Columns("A:A").Select
Selection.Insert Shift:=xlToRight
Range("A1").Select
ActiveCell.FormulaR1C1 = "=ROW()"
Columns("A:A").Select
Selection.FillDown
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Cells.Select
Application.CutCopyMode = False
Selection.Sort Key1:=Range("B1"), Order1:=xlDescending, Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Rows(ActiveSheet.Range("B1").End(xlDown).Row + 1 & ":65536").Select
Selection.ClearContents
Cells.Select
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Columns("A:A").Select
Selection.Delete Shift:=xlToLeft
Range("A1").Select
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige