Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Tabellenbereich löschen - langsam

Forumthread: Tabellenbereich löschen - langsam

Tabellenbereich löschen - langsam
02.09.2013 13:18:12
liliho
Guten Tag,
ich will alle Zeilen in einem Tabellenbereich löschen (und danach die Zeilen wieder neu befüllen).
Ich mache dies per VBA und benutze denselben Code, der mir per Macro-Recorder gezeigt wurde. Manuell ging das absolut rasant: Bereich (Tabellen-Name) markiert, Zeilen löschen... Schwupps.
Per VBA (Loop) geht das ok, aber bei mehr als 1000 Zeilen doch ziemlich langsam.
Ich habe ScreenUpdate und Calculation ausgeschaltet.
Muss ich noch andere Sachen ausschalten?
Pivot-Tabellen, die sich auf diese Tabelle1 beziehen werden ggf. laufend aktualisiert?
Mein VBA-Code:
With Tabelle1 ' Arbeitsblatt
max = ... diese Zahl hole ich aus einer anderen Zelle, die laufend nachgeführt wird
Call doWait (Cursor auf Wait, ScreenUpdate ausschalten, Calculation aus)
Application.Goto Reference:="TabDatenImport"
For zae = 1 To max
Selection.ListObject.ListRows(1).Delete
Next zae
MsgBox "Fertig"
Call stopWait (alles wieder einschalten)
Diese Sub benötigt eine deutlich sichtbar lange Zeit... stört mich zwar nicht, aber ein anderer User wird da ggf. bereits nervös ;-)
Vielen Dank für einen Experten-Rat
Gruss,
Liliane

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenbereich löschen - langsam
02.09.2013 13:44:59
Hajo_Zi
setze die Variable Max auf 0, die wird in der schleife nicht benötigt.

AW: Tabellenbereich löschen - langsam
02.09.2013 15:32:55
liliho
Hallo Hajo,
wieso 0? max heisst: die anfängliche Zahl der Tabellen-Zeilen.
Alle Zeilen werden gelöscht, als mache ich einen Loop über diese Anzahl?
Innerhalb der Schlaufe ist max sicher nicht relevant, aber für der Loop-Ausstieg
Im Makro (zum Ausprobieren) sind soviele Befehlszeilen mit
Selection.ListObject.ListRows(1).Delete
Gruss, Liliane

Anzeige
AW: Tabellenbereich löschen - langsam
02.09.2013 17:31:01
Hajo_Zi
Gut Du hast mehr Ahnung als ich Du Läuft 10.000 durch die Schleife und löscht 10.000 den gleichen Bereich. Dann wundere Dich nicht das es solange dauert.
Gruß Hajo

AW: Tabellenbereich löschen - langsam
02.09.2013 15:59:40
selli
hallo liliane,
zeilen würde ich immer von unten nach oben löschen (for next schleife mit step -).
dann brauchst du auch deine variable max nicht dauernd zu erneuern.
gruß
selli

Anzeige
AW: Tabellenbereich löschen - langsam
03.09.2013 11:33:28
Gerd
Hallo Liliane,
was soll hinterher vom "Tabellchen" übrig bleiben?
Gruß Gerd

AW: Tabellenbereich löschen - langsam
03.09.2013 14:34:16
liliho
Hallo Gerd,
Danke für die Nachfrage:-)
Die Tabelle behält nur die Überschriften bzw. ich lasse eine einzige Zeile stehen.
Das ist auch alles kein Problem und i.O.
Meine Frage betrifft eigentlich lediglich die Art, wie Excel arbeitet:
wenn ich die Tabelle manuell lösche, dauert das gar keine Zeit.
Wenn ich den manuellen Vorgang per Makro aufzeichne und dann wieder als Sub laufen lasse, dann dauert es länger. Ich weiss eben nicht, wo/wie/was da etwas verschieden abläuft.
Nimmt mich eben wunder und es wäre schön, wenn durch Knopfdruck meine Lösch-Sub auch so schnell arbeiten würde bzw. es nur "Schwupps" machen würde.
Mit Gruss,
Liliane

Anzeige
AW: Tabellenbereich löschen - langsam
03.09.2013 15:26:54
Gerd
Hallo Liliane!
Probiers mal so:
Tabelle1.ListObjects(1).DataBodyRange.Rows("1:" & Max).Delete
Anstelle des Index 1 kannst du auch den Namen des Tabellchens schreiben.
Gruß Gerd
;
Anzeige
Anzeige

Infobox / Tutorial

Tabellenbereich in Excel effizient löschen


Schritt-für-Schritt-Anleitung

Um einen Tabellenbereich in Excel effizient zu löschen, kannst du den folgenden VBA-Code verwenden. Dieser Code löscht alle Zeilen in einem Tabellenbereich, ohne dass du in einer Schleife jede Zeile einzeln löschen musst:

Sub TabellenbereichLoeschen()
    Dim max As Long
    max = Tabelle1.ListObjects(1).ListRows.Count ' Anzahl der Zeilen ermitteln
    Tabelle1.ListObjects(1).DataBodyRange.Rows("1:" & max).Delete ' Alle Zeilen auf einmal löschen
    MsgBox "Alle Zeilen wurden gelöscht!"
End Sub

Dieser Ansatz ist deutlich schneller, da er die Excel-Funktionalität direkt anspricht und nicht über Schleifen iteriert. Mit DataBodyRange kannst du den gesamten Datenbereich der Tabelle ansprechen.


Häufige Fehler und Lösungen

  1. Langsame Ausführung bei Schleifen: Wenn du Selection.ListObject.ListRows(1).Delete in einer Schleife verwendest, kann das extrem langsam sein, besonders bei großen Tabellen. Verwende stattdessen die oben genannte Methode.

  2. ScreenUpdating und Calculation: Wenn die Ausführung trotzdem langsam ist, stelle sicher, dass du Application.ScreenUpdating = False und Application.Calculation = xlCalculationManual am Anfang deiner Sub setzt und sie am Ende wieder aktivierst.

  3. Pivot-Tabellen: Wenn deine Tabelle mit Pivot-Tabellen verbunden ist, kann das Aktualisieren der Pivot-Tabellen ebenfalls Zeit kosten. Überlege, ob du das Aktualisieren vorübergehend deaktivieren kannst.


Alternative Methoden

Eine weitere Möglichkeit, den Excel Tabellenbereich zu löschen, besteht darin, die gesamte Tabelle zu löschen und anschließend eine neue Tabelle zu erstellen. Dies kann hilfreich sein, wenn du die gesamte Struktur zurücksetzen möchtest:

Sub TabelleZuruecksetzen()
    Tabelle1.ListObjects(1).Delete
    Tabelle1.ListObjects.Add(xlSrcRange, Tabelle1.Range("A1:B1"), , xlYes).Name = "NeueTabelle"
    MsgBox "Tabelle wurde zurückgesetzt!"
End Sub

Diese Methode entfernt die gesamte Tabelle und erstellt eine neue, was in bestimmten Szenarien nützlich sein kann.


Praktische Beispiele

Wenn du spezifische Zeilen löschen möchtest, kannst du auch die Indizes anpassen. Zum Beispiel, um nur die ersten 10 Zeilen zu löschen:

Sub TeilbereichLoeschen()
    Tabelle1.ListObjects(1).DataBodyRange.Rows("1:10").Delete
    MsgBox "Die ersten 10 Zeilen wurden gelöscht!"
End Sub

Du kannst auch selection.listobject.listrows(2).delete verwenden, um gezielt die zweite Zeile zu löschen. Dies ist besonders nützlich, wenn du nicht alle Zeilen gleichzeitig entfernen möchtest.


Tipps für Profis

  • Löschen von unten nach oben: Wenn du Zeilen in einer Schleife löschst, tue dies von unten nach oben. Das verhindert Probleme mit Zeilenverschiebungen.
For zae = max To 1 Step -1
    Tabelle1.ListObjects(1).ListRows(zae).Delete
Next zae
  • Makros optimieren: Überlege, ob es sinnvoll ist, andere Berechnungen oder Updates während des Löschvorgangs auszuschalten, um die Leistung zu steigern.

  • Verlauf löschen: Wenn du den Verlauf in Excel löschen möchtest, gehe zu "Datei" -> "Optionen" -> "Erweitert" und suche nach der Option, den Verlauf zu löschen.


FAQ: Häufige Fragen

1. Warum ist das Löschen von Zeilen in Excel so langsam?
Das Löschen von Zeilen kann langsam sein, insbesondere wenn du jede Zeile einzeln in einer Schleife löschst. Verwende stattdessen Methoden, die mehrere Zeilen auf einmal bearbeiten.

2. Wie kann ich sicherstellen, dass meine Tabelle nach dem Löschen korrekt aktualisiert wird?
Stelle sicher, dass du nach dem Löschen der Zeilen die Pivot-Tabellen manuell aktualisierst oder die Berechnungseinstellungen von Excel anpasst.

3. Gibt es eine Möglichkeit, den Excel Verlauf zu löschen?
Ja, du kannst den Verlauf über die Excel-Optionen unter "Erweitert" löschen. Dies hilft, die Performance zu verbessern, wenn der Verlauf zu groß wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige