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

Mit Arrays schneller rechnen

Mit Arrays schneller rechnen
16.04.2009 21:36:42
Christoph
Hallo liebes Excel-Forum,
anbei findet Ihr eine Arbeitsmappe (https://www.herber.de/bbs/user/61241.xls
). Kurz zu meinem Problem. Ich wähle jedes Jahr zufällig eine Reihe aus und möchte diese dann zu den Gesamt-Cashflows über die ganze Laufzeit (also vom Beginn der ersten Reihe bis zum letzten Jahr der letzten Reihe) addieren. Leider ist mir bisher noch nichts schnelleres eingefallen als der Code in der Arbeitsmappe. Leider deshalb, weil ich mehr Reihen habe und das ganze auch ziemlich oft gemacht werden soll (je 10,000 mal und das auch wieder ein paar Mal). Ein Run dauert derzeit 5 Stunden und der Rest ist meiner Meinung schon optimiert. Wäre also super, wenn sich das noch verbessern könnte.
Ist es vielleicht möglich das ganze nicht durch For Next einzulesen, sondern gleich die ganze Range einem Array zu übergeben (hier habe ich 4 Jahre, in Echt sind es 60 Quartale, j ist bei mir also 60 und nicht 4) und diesen Array dann auf arrCF zu addieren (natürlich beginnend von der richtigen Position).
Ich bin für jede Hilfe wirklich sehr dankbar und hoffe mich verständlich ausgedrückt zu haben!
Grüße Christoph

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Link/Datei anklickbar gemacht
16.04.2009 22:29:44
Daniel
Hi
eigentlich ist es ganz einfach, eine Range in ein Array einzulesen:

Dim arr
arr = Range("A1:C100").value 


dabei wird das Array dann automatisch passend dimensioniert, dh als 2-Dimensionales Array mit dem Startindex 1 (nicht 0)
das Rückschreiben geht dann genau umgekehrt, allerdings muss man darauf achten, daß das angegebene Range genauso gross wie das Array ist.


Range("A1:C100").value = arr


sollte die Array-Grösse nicht bekannt sein, kann man diese mit UBOUND ermitteln:


Range("A1").Resize(Ubound(arr,1), Ubound(arr,2)).value = arr


Gruß, Daniel

Anzeige
AW: Link/Datei anklickbar gemacht
16.04.2009 22:46:48
Christoph
Hallo Daniel,
danke für die Antwort. Kann ich denn nun zwei Arrays miteinander addieren? Und zwar beginnend von unterschiedlichen Positionen? Also nehmen wir mal an, dass ich im Jahr 1985 bin und Reihe 9 ziehe. Nun will ich dessen 4 Zahlen auf den Array arrCF addieren und zwar an Position 3, 4, 5 und 6. Muss ich das wieder per Schleife machen oder gibt es da einen einfachen Befehl? Sonst sehe ich leider nicht, wie das Einlesen meine Performance verbessern könnte.
Grüße Christoph
AW: Link/Datei anklickbar gemacht
16.04.2009 23:03:45
Daniel
Hi
da musst du dich mal bei den Mathematischen Operationen durchwühlen, ob es da Funktionen zum Addieren von Arrays (in diesem Fall auch Matritzen genannt) gibt.
allerdings ist Excel beim bearbeiten von Array-Variablen um Welten schneller als beim Bearbeiten von Excel-Objekten (Range und Cells), so daß man problemlos die gewünschten Array-Operationen in einer Schleife durchführen kann, wenn es sich wirklich nur um reine Array-Variablen handelt.
selbst wenn es solche Funktionen gäbe, wären sie wahrscheinlich auch nicht schneller, als das von dir geschriebene Schleifenmakro, da intern diese Funtkion ja auch nichts anderes machen kann.
Gruß, Daniel
Anzeige
AW: Link/Datei anklickbar gemacht
16.04.2009 23:09:28
Christoph
OK, dann muss ich die 5 Stunden wohl in Kauf nehmen pro Run. Danke für die Hilfe!
Grüße Christoph
AW: Link/Datei anklickbar gemacht
16.04.2009 23:23:56
Daniel
Hi
wieso?
in dieser Zeile verwendest du noch Excelobjekte (fett)

arrCF(j + i - 1) = arrCF(j + i - 1) + Sheets("CF").Cells(intReihe, j + 2).Value


diese Werte vom Sheet("CF") kannst du ja auch in ein Array einlesen und dieses verwenden, was die verarbeitungsgeschwindigkeit deutlich erhöhen würde.
Gruß, Daniel

AW: Link/Datei anklickbar gemacht
16.04.2009 23:26:40
Christoph
Das werde ich mal versuchen, vielen Dank! Gebe dann Bescheid, ob es geklappt hat.
AW: Link/Datei anklickbar gemacht
17.04.2009 10:22:51
Christoph
Hey Daniel, der Tipp mit dem Zwischenspeichern der Daten in Arrays war die Rettung. Der Code ist jetzt ca. 10-mal schneller. Vielen, vielen Dank nochmal.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige