Hallo Leon,
vermeide unnötige Berechnungen i der Scheife, versuche Potenzen zu vermeiden (Quadrieren geht mit * schneller, vermutlich auch Wurzelziehen mit Sqr), verwende kürzere Vaiablennamen in der Schleife (vielleicht bilde ich mir hier nur ein, dass das schneller geht). Z.B.:
a = 2
h = 15
s = 16
d = 235.2
r = 117.6
d0 = 18.4
b = r - d0
c = 2 * d
Set Startzelle = Application.InputBox("Markieren Sie die Startzelle", Type:=8)
'Application.ScreenUpdating = False
intZeileQ = Startzelle.Row
intSpalte = Startzelle.Column
For i = intZeileQ To Cells(Rows.Count, intSpalte).End(xlUp).Row
Cells(i, h).Value = b - Cells(i, a).Value
x = Cells(i, h).Value
If X <= r Then
Cells(i, s).Value = 2 * Sqr(2 * r * x + x * x)
Else
Cells(i, s).Value = c - 2 * Sqr(2 * r * x + x * x)
End If
'Application.ScreenUpdating = True
Next i
Ich bin gespannt, welche Verkürzung du erhälst.
Gruß
Holger
Leon schrieb am 30.11.2009 12:54:51:
Hi,
ich habe ein Makro das in einer Schleife für mehrere 100.000 Zeilen in 20 Spalten Berechnungen durchführt. Die Folge ist, dass das Makro fast 5 Minuten läuft. Der Startpunkt des Makros wird von Hand festgelegt (Startzelle).
Wie kann ich das Makro schneller machen?
Vielleicht kommt man ja irgendwie ohne Schleife aus?
Als Beispiel habe ich die Berechnung für 2 Spalten eingefügt.
Danke
Leon
Sub Schleife()
Dim Startzelle As Range
Dim intZeile, intZeileQ As Integer
Dim intSpalte As Integer
Dim A, h, s As Integer
A = 2
h = 15
s = 16
d = 235.2
r = 117.6
d0 = 18.4
Set Startzelle = Application.InputBox("Markieren Sie die Startzelle", Type:=8)
'Application.ScreenUpdating = False
intZeileQ = Startzelle.Row
intSpalte = Startzelle.Column
For intZeile = intZeileQ To Cells(Rows.Count, intSpalte).End(xlUp).Row
Cells(intZeile, h).Value = r - d0 - Cells(intZeile, A).Value
If Cells(intZeile, h).Value <= r Then
Cells(intZeile, s).Value = 2 * (r ^ 2 - (r - Cells(intZeile, h).Value) ^ 2) ^ 0.5
Else
Cells(intZeile, s).Value = d + d - (2 * (r ^ 2 - (r - Cells(intZeile, h).Value) ^ 2) ^ 0.5)
End If
'Application.ScreenUpdating = True
Next intZeile
End Sub
|