Thema Datum  Von Nutzer Rating
Antwort
30.11.2009 12:54:51 Leon
NotSolved
Blau Aw:Schleife zu langsam
30.11.2009 13:44:53 Holger
NotSolved
01.12.2009 12:29:27 Leon
NotSolved

Ansicht des Beitrags:
Von:
Holger
Datum:
30.11.2009 13:44:53
Views:
767
Rating: Antwort:
  Ja
Thema:
Aw:Schleife zu langsam
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

Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
30.11.2009 12:54:51 Leon
NotSolved
Blau Aw:Schleife zu langsam
30.11.2009 13:44:53 Holger
NotSolved
01.12.2009 12:29:27 Leon
NotSolved