Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1368to1372
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

Geschwindigkeitsbremse Range-Zuweisung

Geschwindigkeitsbremse Range-Zuweisung
22.07.2014 00:03:22
Kuttel
Hallo noch einmal,
Frage an die Experten: dauert das Einlesen eines Ranges in eine Variable genauso lange wie das kopieren einer Range-Variablen?
In VBA formuliert:
Set Variable1 = Tabelle1.Range("A1:C15")
genauso schnell bzw. langsam wie
Set Variable2 = Variable1
Worauf ich hinaus will: lohnt es sich zu Anfang den Range einmal einzulesen und dann bei Bedarf immer nur die Variable1 als Quelle zu verwenden anstatt den Range explizit zu bezeichnen?
Danke und Gruß
Kuttel

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Geschwindigkeitsbremse Range-Zuweisung
22.07.2014 06:51:45
Hajo_Zi
Hallo Kuttel,
das 2 hätte ich nicht set gesehen. Ich interpretiere es mal so es soll auf ein Array.
das ist die Frage wie oft Du den Bereich brauchst. Auf ein Array kannst Du schneller zugreifen als auf die Tabelle.

AW: Geschwindigkeitsbremse Range-Zuweisung
22.07.2014 07:46:38
Daniel
Hi
Das Arbeiten mit der Variablen lohnt sich folgenden Gründen auf jeden Fall:
- sollte sich der Zellbereich ändern, musst du bei der Variablenversion nur an einer Stelle den Code anpassen, nämlich bei der Zuweisung.
Sprichst du den Zellbereichs direkt an, musst du an allen Stellen ändern und die Wahrscheinlichkeit, dass du eine Stelle vergisst, ist groß.
Das Arbeiten mit Variablen spart so Zeit und reduziert die Fehlerwahrscheinlichkeit.
- wenn du mehrere Zellbereiche hast, dann verlierst du schnell die Übersicht.
Schreibst du Range("a1:j100"), dann musst du immer erst schauen, worum es da geht.
Schreibst du rngKundentabelle, weißt du sofort, was gemeint ist.
Bedenke, dass es manchmal notwendig ist, den Code nach einem Jahr oder länger zu ergänzen oder zu Korrigieren. Dann ist es wichtig, dass der Code so geschrieben ist, dass man sich schnell darin zurecht findet. Dabei helfen Variablen mit sprechenden Namen.
Gruß Daniel

Anzeige
AW: Geschwindigkeitsbremse Range-Zuweisung
22.07.2014 09:20:12
Kuttel
Einleuchtende Tipps. Danke dafür. Aber in Sachen Geschwindigkeit bringt die Variable keine merklichen Vorteile, richtig?

AW: Geschwindigkeitsbremse Range-Zuweisung
22.07.2014 09:27:11
Daniel
Die Ansprache über Variablen ist minimal schneller.
Gruß Daniel

AW: Geschwindigkeitsbremse Range-Zuweisung
22.07.2014 09:33:23
Nepumuk
Hallo,
deine Variable Variable1 enthält nach der Zuweisung (Set ...) die Adresse des Bereichs im Arbeitsspeicher. Der Zugriff darauf ist über die Variable schneller als über die Range-Eigenschaft da diese immer erst die Adresse auswerten muss um das entsprechende Objekt zurückzugeben. Der Vorteil liegt bei rund 10%.
Gruß
Nepumuk

AW: Geschwindigkeitsbremse Range-Zuweisung
22.07.2014 10:53:27
Kuttel
Danke für die Info! 10% ist doch schon mal was. Ich werde meinen Quellcode entsprechend anpassen.
Eine Frage zu diesem Themenkomplex hätte ich noch: Macht es einen Unterschied in Sachen Geschwindigkeit/Performance, ob ich einer Variablen per Set-Anweisung einen Namens-definierten Rangebereich zuweise?

Set Variable1 = ThisWorkbook.Names("Beispiel").RefersToRange

Ich vermute mal nein...
Danke und Gruß
Kuttel

Anzeige
AW: Geschwindigkeitsbremse Range-Zuweisung
22.07.2014 11:01:04
Nepumuk
Hallo,
anders als ausprobieren mach ich auch nicht, also: Selbst ist der Mann !!!
ich würde es auch noch so testen:
Tabelle1.Range("Beispiel")
könnte schneller sein, aber teste es einfach.
Gruß
Nepumuk

AW: Geschwindigkeitsbremse Range-Zuweisung
22.07.2014 14:05:04
Daniel
den Geschwindikeitsgewinn ist minimal und wird wahrscheinlich nie spürbar werden.
Ich würde die Mehtode verwenden, die für dich als Programmierer am übersichtlichsten ist und den geringsten Pflegeaufwand verursacht.
Gruß Daniel

AW: Geschwindigkeitsbremse Range-Zuweisung
22.07.2014 14:52:57
Nepumuk
Hallo,
von Daniels Auffassung möchte ich dringendst Abraten. In großen und komplexen Auswertungen kann sich ineffiziente Programmierung ganz schön aufschaukeln. Ich hab mal so ein Amateurprogramm überarbeiten dürfen. Da lief im Originalzustand gut 45, nach der totalen Optimierung noch 2 Minuten. Das als nicht spürbar zu bezeichnen halte ich für ausgesprochen naja kannst du dir denken. Klar hat der ursprüngliche Ersteller das Programm nach der Überarbeitung nicht mehr pflegen können, aber das war ihm scheißegal und er hat mich gerne dafür bezahlt. Denn die Zeitersparnis war für ihn wesentlich wertvoller.
Rechne mal so: 20 Leute die täglich nur eine Minute länger auf ein Programm waren müssen kosten die Firma: 20Leute * 1Minute * 210Arbeitstage/Jahr * 30€Bruttolohn+Nebenkosten = 2.100€
Wenn du nur 50 von solch inneffizienten Programmen hast sind das schon über 100.000€ Mehrkosten pro Jahr.
Das ist spürbar !!!
Gruß
Nepumuk

Anzeige
AW: Geschwindigkeitsbremse Range-Zuweisung
22.07.2014 15:01:21
Daniel
wieviel von dieser Zeiteinsparung geht auf das Konto der hier besprochenen Ansprache der Zellbereiche (direkt oder über Variablen) ?
ich bin mir sicher, dass die Ursachen für die Zeiteinsparung andere waren.
bitte beschreibe das Projekt mal näher.
für mich als Programmierer ist es auch nicht unerheblich, ob ich für ein Projekt 10 oder 20 h benötige, dass sind auch Kosten
Gruß Daniel

AW: Geschwindigkeitsbremse Range-Zuweisung
22.07.2014 15:24:58
Nepumuk
Hallo,
ist ja ne super Einstellung. Die 10 Stunden mehr benötigst du einmalig. Der Benutzer wartet dagegen jedes mal, die arme Sau. Und ein guter Programmierer braucht garantiert nicht doppelt so lange um ein Programm von Haus aus so zu schreiben, der ist damit im Allgemeinen sogar erheblich schneller.
Ich bezog mich auf diese Aussage:
Ich würde die Mehtode verwenden, die für dich als Programmierer am übersichtlichsten ist und den geringsten Pflegeaufwand verursacht.
Ich predige dagegen: Versuche die schnellste Variante zu finden die möglich und sicher ist. Dem Benutzer ist es doch völlig egal ob ein Code 500 oder 1.000 Zeilen hat. Aber ob er 2 oder 5 Sekunden warten muss, das ist für ihn von Belang, denn nach 3 Sekunden fängt er an genervt zu sein und mit den Fingernägeln nervös auf der Tischplatte herum zu trommeln.
Gruß
Nepumuk

Anzeige
AW: Geschwindigkeitsbremse Range-Zuweisung
22.07.2014 15:54:54
Daniel
des wegen schrieb ich ja dazu, dass in diesem Fall die Zeitersparnis minmal und nicht spürbar sein wird und das man deswegen und in diesem Fall es besser ist, sich auf einen sauberen Programmierstil zu konzentieren.
Nochmal für dich in aller deutlichkeit: IN DIESEM FALL, WEIL DIE ZEIT UNTERSCHIEDE NICHT SPÜRBAR SIND !
bitte pflücke meine Aussagen nicht auseinander, wenn diese zusammengehören!
ausserdem geht ich davon aus, dass die mehrzahl der hier fragenden keine Profis sind, die ihre Codes für andere schreiben sondern mehrheitlich für den eigengebrauch, dh Autor = Nutzer, und dann ist der Zeitaufwand für die Programmierung nicht unerheblich.
und wie gesagt, die Zeitersparnis von 40 Minuten kommt sicherlich nicht durch die geänderte Range-Ansprache allein, sondern zum grössten Teil durch andere Massnahmen.
Gruß Daniel

Anzeige
AW: Geschwindigkeitsbremse Range-Zuweisung
22.07.2014 16:34:57
Kuttel
Hallo zusammen,
ich denke, dass in meinem Projekt Daniel richtig liegt wenn er meint, dass die Unterschiede wohl kaum spürbar sind. Ich arbeite an einem Projekt, dass einen Eintrag auf einem Tabellenblatt in Echtzeit quasi in anderer Weise auf andere Tabellenblätter in der Mappe überträgt. Das ganze passiert nach jeder Eingabe eines Wertes in einer Zelle. Ich will in meinem Fall nur die "Trägheit" / "Latenz" minimieren, mit der sich der Auswahlrahmen weiterbewegt und der Nutzer nicht gezwungen ist eine Pause zwischen zwei Zelleinträgen einzulegen.
Anders sieht es sicher aus, wenn man per Makro große Datenbanken auswertet mit tausenden von Zeilen. Hier summieren sich die Ineffizienzen sicherlich...
Insofern habt Ihr also beide Recht, oder?
Also, Friede sei mit Euch!
Gruß
Kuttel

Anzeige
AW: Geschwindigkeitsbremse Range-Zuweisung
22.07.2014 16:45:22
Daniel
Richtig.
Im allgemeinen versucht man aber (insbesondere beim Arbeiten mit grossen Tabellen) die Anzahl der Zugriffe auf Excelzellen soweit wie möglich zu redzuieren, weil diese eben viel Zeit kosten (insbesondere beim Schreibenden Zugriff)
der Zeitdifferenz für die verschieden "Ansprachemethoden" ist hier der kleinste Zeitbaustein.
man muss halt abwägen.
Wenns um Minuten oder Sekunden geht, sollte natürlich die Laufzeit Priorität haben, aber die letzten 1/10s oder 1/100s muss man nicht zwingend holen, wenn darunter die Les- und Pflegbarkeit des Codes leiden würde.
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige