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

Macro wird extrem langsam

Macro wird extrem langsam
02.08.2008 20:53:29
BUGGI1000
Ich habe nachstehendes voll funktionsfähiges Macro geschrieben, was seltsamerweise in der
3. Spalte anfängt extrem langsam zu werden. Was möchte ich tun? Ich habe 2 Datenreihen, die
etwa 10.000 Datensätze jeweils beinhalten. Aus beiden Reihen möchten ich Korrelationen rechnen,
über die Korrel() Funktion in Excel. Ich möchte aber nicht die Korrelation über die gesamte Reihe
berechnen, sondern über einen verschiebbaren Bereich, der variabel sein soll, nennen wir den Bereich
a als Int. Somit spannen sich beide Datenreihen in 2 Spalten über 10.000 Zeilen auf, aus denen
Korrelationen in Abhängigkeit von a in Spalten X gerechnet werden sollen. Die Spaltenanzahl X beträgt
aktuell etwa 200, so dass ich ca. 10.000 x 200 = 2.000.000 Korrelationseinträge in den einzelnen
Zellen besitze. Starte ich das Macro, fängt er "schnell" an, bis er bei Spalte 3 (ca. Mitte) ist, ab dort wird
das Macro extrem langsam. Egal wo ich das Macro starten lasse, nach ca. 2,5 Spalten scheint irgendein
"Puffer" vollgelaufen zu sein und das System steht praktisch. Excel schließen und neustarten schafft
Abhilfe, bis zur nächsten 2,5. Spalte. Was kann ich hier tun?

Sub Test()
Dim i As Integer
Dim a As Integer
Dim b As Variant
'Range("W3663:IV15027").Select
'Selection.ClearContents
For i = 0 To 235
b = Range("w3657").Offset(0, i).Value
Dim bString As String
bString = b - 1
For a = b To 11365
Range("w3661").Offset(a, i).Select: ActiveCell.FormulaR1C1 = "=CORREL(R[-" +  _
bString + "]C13:R[0]C13,R[-" + bString + "]C14:R[0]C14)"
Next a
Next i
End Sub


4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Macro wird extrem langsam
02.08.2008 21:09:00
Nepumuk
Hallo BUGGI1000,
schalte zu beginn deines Codes die automatische Berechnung aus und am Ende wieder ein.
Gruß
Nepumuk

AW: Macro wird extrem langsam
02.08.2008 21:36:02
BUGGI1000
Danke für den Hinweis. Nach der Implementierung klappt es ganz gut, zwar braucht er für ein
Tabellenblatt immer noch hochgerechnet 20-25Min., aber nun denn.
Apropos, sofern ich Excel "in Ruhe lasse" läuft er durch, mache ich nebenbei noch etwas anderes,
wird er selbst in diesem Modus sehr langsam, ob das ein Bug ist weiß ich nicht?

AW: Macro wird extrem langsam
03.08.2008 02:46:13
Daniel
Hallo
ich weiß jetzt nicht, ob das für die geschwindigkeit viel bringt, aber du hast da einige Sachen drin, die nicht ganz der Lehrmeinung bzgl effektivem Programmierens entsprechen:
1. b ist als Variant deklariert, wird im Folgeden aber wie eine Zahl verwendet. da es sich bei b offensichtlich um ZeilenNummern handelt, wäre hier wahrscheinlich der Datentyp LONG sinnvoller
2. das Umwandeln von b in bString ist nicht erforderlich, beim Zusammensetzen von Strings können auch Numerische Variablen eingebaut werden.
3. die DIM-Anweisung für bString steht innerhalb der Schleife, sowas macht man auch nicht (ganz abgesehen davon, daß bString überflüssig ist
4. Select und Werte in Zellen schreiben in Schleifen kostet viel Zeit. du kannst problemlos auf die Innere Schleife verzichten und die Formel auf einen Rutsch reinschreiben:.
5. hast deine Excelversion wenn ich richtig informiert bin, auch 256 Spalten. die Zeilen: "Range("w3657").Offset(0, i).Value" muss bei i = 235 einen Fehler bringen, weil hier die 258. Spalte angesprochen würde.
das Makro sieht dann so aus:

Sub Test()
Dim i As Long
Dim b As Long
'Range("W3663:IV15027").Select
'Selection.ClearContents
For i = 0 To 233
b = Range("w3657").Offset(0, i).Value
Range("w3661").Offset(b, i).Resize(11365 - b).FormulaR1C1 = _
"=CORREL(R[-" & b & "]C13:R[0]C13,R[-" & b & "]C14:R[0]C14)"
Next i
End Sub


Gruß, Daniel

Anzeige
AW: Macro wird extrem langsam
03.08.2008 11:12:24
BUGGI1000
Daniel, ich bin extrem erstaunt, bis auf eine Kleinigkeit (habe ich selbst geändert) tut es das auch und
extrem viel schneller! Man lernt nie aus - DANKE!
Ich muss grad noch weiter testen. Mit meiner alten Implementierung, war mein Vorhaben nicht umsetzbar,
bei jeden Zellenaktualisierung, hat Excel für ein Tabellenblatt ca. 30-60 Sekunden gerechnet. Habe bis
dato die Spaltenanzahl deutlich reduziert, wobei die Rechenzeit auf 5 Sekunden sank. Ich habe keine
Ahnung warum eine Makroänderung bei der Zellenberechnung / -aktualisierung eine Geschwindigkeits-
änderung hervorrufen soll - tut es aber. Excel wird mir so langsam unheimlich. ;-)
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige