Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zeilen einfügen, große Datei, Excel und eine Ewigkeit.

Zeilen einfügen, große Datei, Excel und eine Ewigkeit.
24.11.2019 19:29:08
AnBad
Hallo liebe Excel-Gemeinde,
ich teste gerade eine Datei mit rund 5000 Zeilen. Zum Test wollte ich irgendwo bei Zeile 2500 ein paar leere Zeilen einfügen. Und Sie da: Der PC/Excel rackert sich damit ab. Ist das normal?
Alternativ dachte ich mir, ich lasse einfach die restlichen 2500 VBA nach unten kopieren über ein Array (einlesen + schreiben). Das glaube ich ging/geht schneller, oder?
Das hatte ich in einer kleinen Datei bereits getestet. Leider werden mit dem Array keine Formate kopiert.
Also dachte ich mir weiter, ich lasse VBA wirklich die Zeilen copy und paste machen. Damit bin ich jedoch wieder an meinem Ausgangsproblem: Der Excel braucht 5 Minuten.
Das wundert mich alles: Ein Excel mit 1 Mio. Zeilen, aber mit 5000 Zeilen schon überfordert?
Sehe ich das richtig?
Was ist der beste Weg, Zeilen einzufügen? Mache ich was falsch? Array lesen und schreiben, und dann copy und paste der Formate?
Viele Grüße und schönen Sonntagabend.
Michael
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen einfügen, große Datei, Excel und eine Ewigkeit.
24.11.2019 20:36:16
Piet
Hallo Michael
mit diesem kleinen Programm kannst du bitte mal testen wo dein "UsedRange" wirklich liegt?
Solltest du zum Spass in der letzten Zeile mal was reingeschrieben haben merkt sich Excel > 1.000.000 Zeilen als belegt! (Auch dann wenn du den Zellen Inhalt gelöscht hast!) Die müssten dann komplett verschoben werden.
mfg Piet
Sub test()
MsgBox ActiveSheet.UsedRange.Rows.Count
MsgBox ActiveSheet.UsedRange.Address(0, 0)
End Sub

Anzeige
AW: Zeilen einfügen, große Datei, Excel und eine Ewigkeit.
25.11.2019 06:49:04
AnBad
Hallo Piet, guten Morgen,
sorry, viel Text....
Habe das getestet. Das ist es nicht. Das Blattende liegt korrekt am Ende der Tabelle. Ich habe zum Test die Tabelle auch markiert und mal in eine neue Exceldatei kopiert. Hier ging das Einfügen einer leeren, neuen Zeile schneller. Hat aber auch noch 3-5 Sekunden gedauert. Auch nicht gut.
Kann es sein, dass durch das manuelle Einfügen einer leeren Zeile ein VBA-Makro wegen "Private Sub Worksheet_Change(ByVal Target As Range)" 1000 mal ausgelöst wird und es in Originaldatei deswegen so lange dauert (5 Minuten)?
Ich habe am Angang des Codes:
Application.EnableEvents = False
Application.ScreenUpdating = False
So dass ich denke, das "Private Sub Worksheet_Change(ByVal Target As Range)" bei Einfügen einer leeren Zeile mittels VBA verhindert wird. Bei manuellen Einfügen könnten VBA-Makros wohl ausgelöst werden?
Beides, also manuelles Einfügen und auch durch VBA dauert zum Erbrechen lange...
Ziel der ganzen Geschichte ist es: Wenn ein Anwender in der Tabelle mitten drin in einer neuen Zeile Daten eingibt, dann soll ein Makro über dieser Zeile und unterhalb dieser neuen Zeile dafür Sorgen, dass mindestens 3 neue, leere Zeilen vor der Eingabezeile und 3 Zeilen nach der Eingabezeile eingefügt werden. Wie würdest Du das lösen: Durch VBA einfügen von leeren Zeilen, kopieren der vorhanden Daten nach unten mittels VBA, oder über ein Array (lesen und 3 Zeilen wieder schreiben)?
vg.
Michael
Anzeige
AW: Zeilen einfügen, große Datei, Excel und eine Ewigkeit.
25.11.2019 16:13:12
Piet
Hallo Michael
so aus der Ferne, ohne die Datei vor mir zu haben ist das schwer zu sagen. Mein Verdacht ist jetzt auch dass das Target Makro unendlich oft ausgelçst werden könnte? Das könntest du testen indem du eine leere Zelle als Zaehler benutzt, wo du im Target Makro den Wert immer um Plus 1 erhöhst. Wenn du dann Zeilen löschst sieht du wie oft Target ausgelöst wurde.
Kannst du eine abgespeckte Beispieldatei hochladen wo ich die Makros hier testen kann?
mfg Piet
Anzeige
AW: Zeilen einfügen, große Datei, Excel und eine Ewigkeit.
25.11.2019 18:51:10
AnBad
Hallo Piet,
ich habe den Fehler heute gefunden. Und zwar: Eine Formatierung einer Spalte als Währungswerte Minus=rot, Plus=schwarz.
Ich habe also erstmal alle Formatierung gelöscht, und bin jetzt am Aufbauen einer Minimalformatierung (in jedem Fall ohne Autoformate).
Trotzdem würde mich interressieren, wie Du als Profi Zeilen in Große Tabellenblätter einfügen würdest?
1) .Insert
2) .copy und entsprechen x-Zeilen darunter einfügen
3) in Array Folgezeilen einlesen und x-Zeilen darunter wieder schreiben (Formate gehen verloren?)
Vielen Dank und viele Grüße, schönen Abend!!
Michael
Anzeige
AW: Zeilen einfügen, große Datei, Excel und eine Ewigkeit.
26.11.2019 18:54:26
Piet
Hallo Michael
aus langjaehriger Erfahrung probiere ich bei langen Laufzeiten ALLE Varianten aus, die ich kenne. Vergleiche gerne Laufzeiten miteinander, indem ich mir beim Start und am Ende des Makro die Zeit in zwei Zellen schreibe. Dann sehe ich wie lange das Makro von Start bis Ende gebraucht hat.
mfg Piet
Anzeige
AW: Zeilen einfügen, große Datei, Excel und eine Ewigkeit.
26.11.2019 18:56:41
AnBad
OK,
danke für den Tipp!!
vg
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Zeilen in Excel einfügen: Tipps und Tricks für große Dateien


Schritt-für-Schritt-Anleitung

Um Zeilen in einer großen Excel-Datei einzufügen, folge diesen Schritten:

  1. Öffne die Excel-Datei mit den gewünschten Daten.
  2. Navigiere zur Zeile, wo Du neue Zeilen einfügen möchtest.
  3. Markiere die Zeilen, die Du einfügen möchtest (z.B. eine oder mehrere Zeilen).
  4. Rechtsklick auf die markierte Zeile und wähle „Einfügen“ aus dem Kontextmenü. Alternativ kannst Du auch die Tastenkombination Strg + + verwenden.
  5. Wiederhole den Vorgang für weitere Einfügungen, falls nötig.

Beachte, dass das Einfügen von Zeilen in einer Datei mit mehr als 1 Million Zeilen (z.B. Excel mehr als 1 mio zeilen) deutlich langsamer sein kann.


Häufige Fehler und Lösungen

  • Langsame Leistung beim Einfügen von Zeilen: Dies kann daran liegen, dass Excel denkt, dass mehr als 1 Million Zeilen belegt sind. Überprüfe mit folgendem VBA-Code, wo Dein "UsedRange" liegt:

    Sub test()
      MsgBox ActiveSheet.UsedRange.Rows.Count
      MsgBox ActiveSheet.UsedRange.Address(0, 0)
    End Sub
  • Makros werden unendlich oft ausgelöst: Wenn Du ein Worksheet_Change-Ereignis hast, kann das Einfügen von Zeilen dazu führen, dass es 1000 mal bitte zum kopieren ausgelöst wird. Um dies zu vermeiden, setze Application.EnableEvents = False vor dem Einfügen und Application.EnableEvents = True danach.

  • Verlorene Formatierungen: Wenn Du VBA verwendest, um Zeilen einzufügen, gehen möglicherweise die Formatierungen verloren. Überlege, ob Du die Daten zuerst in ein Array einlesen und dann wieder schreiben willst, um die Formate beizubehalten.


Alternative Methoden

  1. VBA-Skript verwenden: Schreibe ein Makro, das mehrere Zeilen auf einmal einfügt. Dies kann die Leistung erheblich verbessern.

    Beispiel:

    Sub InsertRows()
       Rows("2500:2505").Insert Shift:=xlDown
    End Sub
  2. Formeln nutzen: Wenn Du zwischenzeilen einfügen möchtest, kannst Du eine Formel verwenden, die automatisch leere Zeilen anzeigt, wenn bestimmte Bedingungen erfüllt sind.

  3. Daten in eine neue Tabelle kopieren: Manchmal ist es schneller, die Daten in eine neue Excel-Tabelle zu kopieren, wo Du die Zeilen schneller einfügen kannst.


Praktische Beispiele

  • Einfügen von 100 Zeilen: Wenn Du 100 neue Zeilen unter Zeile 2500 einfügen möchtest, kannst Du folgendes Makro verwenden:

    Sub Insert100Rows()
      Rows("2501:2600").Insert Shift:=xlDown
    End Sub
  • Einfügen von Leerzeilen bei Benutzereingabe: Verwende das Worksheet_Change-Ereignis, um automatisch 3 leere Zeilen über und unter der Eingabezeile hinzuzufügen:

    Private Sub Worksheet_Change(ByVal Target As Range)
      If Not Intersect(Target, Me.Range("A:A")) Is Nothing Then
          Application.EnableEvents = False
          Target.Offset(-3, 0).Resize(6).Insert Shift:=xlDown
          Application.EnableEvents = True
      End If
    End Sub

Tipps für Profis

  • Laufzeiten messen: Schreibe die Start- und Endzeiten in Zellen, um die Leistung Deiner Makros zu vergleichen. Das hilft Dir, die beste Methode zum Zeilen einfügen zu finden.

  • Verwende Application.ScreenUpdating = False: Dies verbessert die Leistung signifikant, indem es das Bildschirm-Update während der Makroausführung deaktiviert.

  • Achte auf die Formatierung: Wenn Du oft zeilen einfügen musst, stelle sicher, dass die Formatierungen bereits im Vorfeld für alle Zellen gesetzt sind. So kannst Du Zeit sparen.


FAQ: Häufige Fragen

1. Warum dauert das Einfügen von Zeilen in großen Dateien so lange?
Excel muss möglicherweise eine große Anzahl von Zellen verschieben, besonders wenn mehr als 1 Million Zeilen belegt sind.

2. Gehen meine Formatierungen verloren, wenn ich VBA benutze?
Ja, wenn Du Daten in ein Array einliest und wieder schreibst, können Formatierungen verloren gehen. Überlege, ob es sinnvoller ist, die Formatierungen manuell neu anzuwenden.

3. Was kann ich tun, um die Leistung beim Einfügen von Zeilen zu verbessern?
Verwende Makros, um mehrere Zeilen auf einmal einzufügen, und deaktiviere Bildschirmaktualisierungen während der Ausführung Deiner Skripte.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige