Anzeige
Archiv - Navigation
1700to1704
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

Zeitverlus durch Select und Schleifen überschätzt?

Zeitverlus durch Select und Schleifen überschätzt?
22.07.2019 17:37:27
Jens
Moin,
nachdem meine Exceldatei endlich fertig war und ich gelesen hatte, dass man möglichst auf select und Schleifen verzichten soll, habe ich angefangen, meinen Code zu optimieren.
In einem Anwendungsbeispiel sah es folgendermaßen aus:
Die Starttabelle A kopiert sich 5 mal.
In Kopie 1 bis 4 werden 52 neue Tabellenblätter erstellt und mit Import von je einer csv-Datei gefüllt.
In Kopie 5 werden ebenfalls 52 neue Tabellenblätter erstellt, aber in jedes Tabellenblatt werden die 4 csv der gleichnamigen Tabellenblätter von Kopie 1-4 untereinander importiert (Ist eine Gesamtübersicht der 4 einzelnen anderen Kopien).
Fertig:-)
Methoden:
1) Erstellen der Tabellenblätter über eine Schleife, danach Import über eine Schleife, wobei jedes Tabellenblatt mit der zweiten Schleife über select ausgewählt wird
2) Erstellen der Tabellenblätter und Import mit einer Schleife, wobei jedes Tabellenblatt nach Erstellung über select ausgewählt wird
3) Erstellen der Tabellenblätter und Import ohne select (auch alle weiteren selects wurden eliminiert)!
Ergebnis:
1 = 175s, 2 = 174s, 3 = 173s
Da hatte ich mir mehr erhofft.....
Wir der Zeitverlust mittels select nicht überschätzt?
Gruß,
Jens

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeitverlus durch Select und Schleifen überschätzt?
22.07.2019 17:56:40
Hajo_Zi
Hallo Jens,
frage jemand der neben Dir sitzt der sieht die Datei.
Die meisten hier sehen Sie nicht.
Da Sie nicht auf Deinen Rechner schauen.
Vielleicht sollte die Datei verlinkt werden?
Benutze hier im Forum die Funktion zum hochladen. Falls Du die nicht benutzen möchtest beachte, von unsicheren Servern wie z.B. www.file-upload.net lade ich keine Datei runter. (lt. Einschätzung meines Virenprogramms)

AW: Zeitverlus durch Select und Schleifen überschätzt?
22.07.2019 18:09:19
EtoPHG
Hallo Jens,
Was sind denn das für abstruse Theorien?
Es geht doch bei der Empfehlung auf .Select zu verzichten, nicht primär um Geschwindigkeit, sondern um die Tatsache, dass dies völlig unnötig ist. Das Selektieren führt dazu, dass die Anzeige gewechselt werden muss und der Aufbau dieser ist vermutlich der zeitintensivste Teil. Was du als Schleife bezeichnest, kann ich nicht nachvollziehen. Schleifen (verstanden als Iterationen) sind Grundlage jeder Programmiertechnik und keinesfalls unverzichtbar. Eine Quelle woher die Behauptung stammt, dass auch diese Zeitintensiv sind, gibst du nicht an. Nur soviel: Werden Zellen in Bereichen innerhalb von Schleifen bearbeitet und du jede einzelne Zelle selektierst wirst du sehr wohl einen relevanten Zeitverlust gegenüber einer direkte Adressierung der Objekte/Eigenschaften haben. Aber diese beiden zu vermischen zeugt von wenig Verständnis von Programmierung, dem Excel Objektmodell und der Anwendung von Methoden. Man könnte jetzt noch über Arrays statt Bereichen, Kombinationen von internen XL-Funktionen und und und... philosophieren, aber das würde zu weit gehen, wenn schon obige Grundverständnisse zu deiner Annahme führen ...
Gruess Hansueli
Anzeige
AW: Zeitverlus durch Select und Schleifen überschätzt?
22.07.2019 18:26:29
Daniel
Hi
naja, kommt immer darauf an, was man macht, und wie oft man die Selects und Activates ausführt.
ein paar Tabellenblätter selektieren ist jetzt nicht große Akt. Zeitkritisch wird das eher, wenn man bspw in einer Schleife tausende von Zellen bearbeiten will und dabei Select und Activate verwendet.
die Zeitfresser liegen bei dir sowieso wo anders.
Bspw braucht das Kopieren eines Tabellenblattes viel Zeit (sofern man nicht die Makros oder die Seiteneinrichtung mit kopieren will, ist es viel schneller, ein neues Blatt anzulegen und die Inhalte zu kopieren), oder auch der Import, je nach Menge der Daten.
Außerdem ist das auch eine Frage der Relation. Bei einer Gesamtlaufzeit von fast 3 Minuten sind 2 Sekunden für das selektieren irrelevant, wenn aber der eigentliche Code in 1/10sec durchrauscht und dann 2 sec dazukommen fürs selektieren, dann ist das viel.
und wie schon geschrieben wurde, Geschwindigkeit ist nur ein kleiner Teil der Vorteile der selektfreien programmierung.
Selectfreier Code ist schneller, übersichtlicher und weniger Fehleranfällig, weil du immer direkt im Blick hast, welchers Objekt gerade bearbeitet wird.
Besonders kritisch wird es dann, wenn du solchen Code im Einzelstep testest und gleichzeitig kontrollierst, was jeder Programmschritt in der Exceldatei bewirkt. Wenn du dabei auch noch zwischen den Tabellenblättern hin- und her blätterst, kann das bei einer Select- und Activate-Programmierung schnell zu Problemen führen, weil du vor ausführung des nächsten Programmschritts auch immer ganz genau darauf achten musst, dass auch das richtige Blatt aktiv ist, damit der Code nicht auf dem falschen Blatt ausgeführt wird.
Gruß Daniel
Anzeige
AW: Zeitverlus durch Select und Schleifen überschätzt?
22.07.2019 18:38:34
onur
Teste mal (der Code schreibt in 5000 Zellen eine 1, einmal mit Select und einmal ohne.
Mit vorher Selektieren: 14,359 sec
Ohne Select: 0,156 sec.
Das ist das 92-fache.
Private Sub CommandButton1_Click()
Dim z, ti, sel
sel = False
'sel = True
ti = Timer
For z = 1 To 5000
If sel Then
Cells(z, 1).Select
Selection = 1
Else
Cells(z, 1) = 1
End If
Next z
MsgBox Timer - ti
End Sub

AW: Zeitverlus durch Select und Schleifen überschätzt?
25.07.2019 10:11:04
Jens
Danke Euch für die vielen Informationen.....hilft sehr!
Vor allem von Daniel mit dem Hinweis auf die Zeit zum Erstellen der Tabellenblätter...
.....da kommt doch die Idee, diese bereits in der Startdatei ausgeblendet vorzuhalten und die benötigte Anzahl nur einzublenden.
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige