Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1756to1760
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
Inhaltsverzeichnis

Berechnungen über 32896 Zeilen...->

Berechnungen über 32896 Zeilen...->
03.05.2020 16:56:10
Frank
Guten Tag,
mir ist ein merkwürdiges Phänomenen aufgefallen, kann das jemand bestätigen? Ich habe ein recht umfangreiches Makro und dieses läuft auch recht zügig durch, hier einmal die Zahlen und Zeilenanzahl:
300 Zeilen: 19 Sek
600//31 Sek
1200// 57 Sek
2400// 63 Sek
4800// 81 Sek
9600// 93 Sek
19200// 102 Sek
25000// 112 Sek
30000//122 Sek
31000//151 Sek
32000//200 Sek
33000//245 Sek
34000//292 Sek
35000//332 Sek
40000//435 Sek
Man sieht schön wie normal die Zeilenanzahl mit der Berechnungszeit ansteigt bis es einen immensen Schub bei der Berechnungszeit ab Zeilen 30000.
Mich beschleicht bei Excel schon länger eine Vermutung: Wenn die Zeilenanzahl eine gewisse Menge überschreitet springt die Berechnungszeit sprunghaft an (habe ich nun schon mehrmals beobachtet). Ich vermute, dass hier im Programmiercode in Excel seit Excel 1997 geschlammt wird seitens von Microsoft durch die Zeilenanzahlbegrenzung damals von 65.536 Zeilen. Da alles auf 1,2,4,8,16,32,64,128,512,1028,2056,4112,8224,16448,32896,65792..... aufgebaut ist, wurde hier vermutlich für komplexere Codes keine Weiterentwicklung mehr betrieben über 32896(30000?) Zeilen, da 99% der Exceluser nicht mehr als 32896 Zeilen benutzen und es dadurch nicht auffällt.
Kann mir jemand diese Problematik bestätigen, also das Makros über einer gewissen Zeilenanzahl (bei mir ca. 30000 Zeilen) zeitlich explodieren?
Am Code etc. liegt es nicht, es gibt auch keine Änderungen der Zahlenkette etc etc.
Meistens steigt der Berechungsfaktor um das vierfache an, habe zwar einen vierkern-prozessor, weiß aber nicht ob das daran liegt. Ich weiß nur, dass excel 2000 früher ein Ram-Problem hatte. Ich könnte mir höchstens vorstellen, dass excel ab 30000 Zeilen Berechnungen automatisch auslagert aus dem Ram und dadurch die Berechnungszeit explodiert (also man hat ab excel 2007 einfach gesagt: wenn über 30000 Zeilen und Ram-"Problem", dann lagere einfach alles aus und schon war das Ram-Problem gelöst -Pfusch...)..

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Kannst Du mal bitte ganz deutlich klarstellen, ...
03.05.2020 17:03:57
lupo1
... ob (oder wo) Du von Tabellenzeilen und Anzahl VBA-Codezeilen sprichst? Was meinst Du mit "komplexeren Codes"? Sprichst Du da von eigenen oder vom Excel-Programmcode?
Außerdem stimmt Deine Verdopplung nach 512 nicht: 1024, 2048 ... 32768, 65536.
AW: Kannst Du mal bitte ganz deutlich klarstellen, ...
03.05.2020 17:05:56
onur
"Am Code etc. liegt es nicht" - das kannst du nicht wissen.
Du solltest mal die Datei mit Code posten.
AW: Kannst Du mal bitte ganz deutlich klarstellen, ...
03.05.2020 17:06:44
onur
Sorry, falscher Zweig.
AW: Berechnungen über 32896 Zeilen...->
03.05.2020 17:06:57
onur
"Am Code etc. liegt es nicht" - das kannst du nicht wissen.
Du solltest mal die Datei mit Code posten.
AW: Berechnungen über 32896 Zeilen...->
03.05.2020 17:53:36
Daniel
Hi
Was intern passiert, weiß ich auch nicht.
Dass es solche Sprünge in der Bearbeitungszeit bei wachsender Zeilenanzahl gibt, ist mir auch schon aufgefallen, allerdings durchaus wechselnd mit den Excelversionen, dh. MS scheint daran zu arbeiten wenn vielleicht auch mit wechselnden Erfolgen.
Man darf halt auch nicht vergessen, dass die theoretisch möglichen Datenmengen erheblich größer geworden sind.
Excel hat jetzt mehr Zellen, als VBA ursprünglich zählen kann.
Ich weiß ja nicht, was du unter "Umfangreich" und "zügig" versteht, aber 19 sec für 300 Zeilen sind lang, da kannst du ne Menge tun, wenn da nur diese 300 Zeilen in Bearbeitung sind, sollte man dich deinen Code mal anschauen.
Gruß Daniel
Anzeige
> 6 Minuten bei 40T Zeilen ist inakzeptabel!
03.05.2020 18:10:55
EtoPHG
Hallo Frank,
Das liegt nicht an "Berechnungen", sondern an deinem Code. Ich verarbeite 0.5 Millionen Zeilen mit VBA-Code unter 60 Sekunden!
Gruess Hansueli
AW: Berechnungen über 32896 Zeilen...->
04.05.2020 00:34:59
Frank
Hi Leute,
danke erstmal für die Antworten.
Ja, ich meinte den Programmier-Code, also wie Excel programmiert ist, nicht den Makro-Code. Ich denke Microsoft schlammt hier ziemlich rum und Excel müsste mal komplett neu geschrieben werden. Die Speicherzuweisungen basieren vermutlich noch auf RAM-Modulen aus Ende der 90iger Jahre. Das würde auch die eklatanten Berechungssprünge erklären. Auch die Zellenberechnung ansich ist ein Graus, was sich natürlich exponentiell auswirkt wenn man mehr und mehr Zellen benutzt.
Dass das Makro so lange braucht liegt an der "Zeile löschen wenn leer" Problematik bei Excel. Zeilen zu leeren/kopieren usw. geht schnell, aber Zeilen zu löschen dauert sehr lange, das ist ein Graus in Excel. Einige behelfen sich mit Filtern (die witzigerweise ab 200000(je nachdem) Zeilen auch den Geist aufgeben bzw. die Löschzeit von Leerzellen ist einfach absurd (z.T. bis zu einer Stunde).
Ich kann das Makro nicht öffentlich machen leider. Es war nur interessant zu sehen, dass die Berechnungszeit ab einer gewissen Zeilenanzahl (also Datensatz mit 30000 Zeilen und ein paar Formeln und Makro-Ausführung) auf einmal die 4-fache Zeit benötigt als vorher. Also die ersten 29999 Zeilen werden z.B. in einer Minute und von 30000 bis 59999 Zeilen benötigen dann 4 Minuten.
Man kann dies wohl nur umgehen indem man die Datensätze über 30000 aufteilt und dann wieder zusammenfügt. Ob das sinnvoll ist, ist eine andere Frage. Mir hat mal ein Programmierer gesagt, dass wenn Leute von Excel und Makros sprechen stellen sich bei Ihm immer die Zehnägel auf :D - Excel VBA ist bei den wohl recht verhasst, es funktioniert einfach nicht vernünftig für größere Codes/Projekte.
Danke erstmal für die Rückmeldung.
PS: Ich habe für "Zeilen löschen wenn leer" noch keine akzeptabel schnelle Variante gefunden. Die Berechnungsproblematik bei Excel zeigt sich bei folgendem Zeilenaufbau:
A1: Apfel
A2: (leer)
A3: Apfel
A4: (leer)
A5: Birne
A6: (leer)
A7: Himbeere
Wenn man nun versucht A2, A4 und A6 per Makro zu löschen, z.B.
Sub leer Zellen löschen()
Dim usedRows As Long
usedRows = ActiveSheet.UsedRange.Rows.Count
For Row = usedRows To 1 Step -1
If ActiveSheet.Cells(Row, 1) = "" Then
Cells(Row, 1).Delete
End If
Next
End Sub
Und das mit über 30000 Zeilen macht springt die Berechnungszeit um das 4-fache an über 30000 Zeilen, oder es steigt zumindest massiv überproportional an, auch schön beim Filter zu sehen, da allerdings erst am 200000 Zeilen ca. Man kann z.B. auch die leeren Zeilen nicht mehr löschen wenn man den Filter anwendet, 200000 Zeilen hat und alle leeren Zeilen löschen will. Excel faselt dann immer irgendetwas von zu vielen Zeilen für ein Diagramm oder so, haha. Gruß!
Anzeige
AW: Berechnungen über 32896 Zeilen...->
04.05.2020 00:50:41
onur
"Ich denke Microsoft schlammt hier ziemlich rum und Excel müsste mal komplett neu geschrieben werden" - Ja klar, was denn sonst, da es ja nicht an deinem Makro liegen kann.
Du könntest das Neuschreiben ja für Microsoft übernehmen. ;)
AW: Berechnungen über 32896 Zeilen...->
04.05.2020 02:29:43
Daniel
Hi
Fürs schnelle Löschen von Zeilen gibts 2 Wege, welche jetzt auch nicht unbedingt neu sind und schon seit längeren in den Foren vorgestellt werden:
1. vor dem Löschen sortieren, so dass alle zu löschenden Zeilen einen lückenlos zusammenhängenden Zellblock bilden um dann diesen Zellblock als ganzes in einem Schritt zu löschen
2. die zu löschenden Zeilen per Hilfsspalte zu markieren, um sie über das "Duplikate entfernen" zu löschen.
Ursache für die lange Wartezeit ist, dass Excel beim Löschen einer Zeile normalerweise prüft, ob irgendwo innerhalb der geöffneten Dateien Zellbezüge in Formeln, Namen, bedingten Formaten oder Datenüberprüfungen vorhanden sind, die auf die gelöschten Zellen referenzieren und angepasst oder verschoben werden müssen.
Das ist dann schon eine größere Aufgabe, die Zeit braucht.
Variante 1. ist deswegen schnell, weil hier nur ein Löschvorgang stattfindet und diese Anpassung für alle Zeilen eines lückenlosen Blocks gemeinsam durchgeführt werden kann..
Variante 2. ist deswegen schnell, weil beim Duplikate entfernen diese Anpassung der Zellbezüge nicht durchgeführt wird.
Gruß Daniel
Anzeige
AW: Berechnungen über 32896 Zeilen...->
04.05.2020 03:21:12
Frank
Vielen Dank für die Infos Daniel! - Du hast geschrieben : "Ursache für die lange Wartezeit ist, dass Excel beim Löschen einer Zeile normalerweise prüft, ..." - kann man das irgendwie ausschalten per Makro durch einen Befehl, also die ganzen Überprüfungen ob sich Zellbezüge ändern usw.?
AW: Berechnungen über 32896 Zeilen...->
04.05.2020 03:29:04
Daniel
Du meinst so wie Bildschirmaktualisierung oder die automatische Neuberechnung der Formeln?
Ich kenne keine entsprechende Anweisung dazu, aber dass muss nichts heißen.
Vielleicht findest du ja was entsprechendes im Objektmodell, ich hab bisher auch noch nicht gesucht, weil ich mit den genannten Varianten gut zurecht komme und diese auch aus anderen Gründen der klassischen Schleife bevorzuge.
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige