2017-10-30 5 views
0

Freunde laufen,Optimieren VBA-Code schneller

ich diesen Code unten bin mit berechnen Ergebnissen mit zwei Reihen von Variablen x, y (Länge und Breite) in einer Matrix. Da die Formel kompliziert ist, dauert es sehr lange, um alle Ergebnisse zu erhalten. Kann mir jemand helfen, den Code so zu optimieren, dass er schneller läuft? Vielen Dank!

Der Code läuft zwischen zwei Registerkarten, VBA Calculation Sheet und Sheet 2. Das erste Array beginnt bei Zelle A3 und das zweite Array beginnt bei Zelle B1.

Sub calculator() 
Worksheets("Sheet2").Select 

Dim long1 As Double 
Dim lat1 As Double 


Application.ScreenUpdating = False 
x = 3 
y = 2 
While IsEmpty(Cells(x, 1)) = False 

lat1 = Cells(x, 1).value 



While IsEmpty(Cells(1, y)) = False 

long1 = Cells(1, y).value 

Worksheets("VBA Calculation Sheet").Select 
Cells(28, 7) = lat1 
Cells(29, 7) = long1 

index = Cells(23, 7).value 


Worksheets("Sheet2").Select 

Cells(x, y) = index 

y = y + 1 
Wend 

x = x + 1 
y = 2 

Wend 

End Sub 
+5

Wenn der Code funktioniert, dann müssen Sie diese Frage mit einem besseren Titel auf https://codereview.stackexchange.com/ zu veröffentlichen, es ist zu breit für dieses Forum, aber perfekt für diesen. –

+1

Ich würde über das Arbeiten mit Arrays nachlesen. Ihr Code ist langsam, da er ständig mit dem Arbeitsblatt interagiert. Es ist besser, Daten in Arrays zu speichern und sie im Code (im Speicher) zu verarbeiten. Dann geben Sie die endgültigen Ergebnisse bei Bedarf in das Arbeitsblatt ein. – Calico

+0

Sie möchten auch die Berechnungen auf dem Blatt zeigen. Um die Dinge zu beschleunigen, sollten Sie die Anzahl der Male beschränken, die Sie benötigen, um auf das Blatt zu verweisen. Man sollte ein Array laden, durch dieses Array iterieren und die Berechnungen im Code durchführen und ein anderes Array zur Ausgabe laden. Auf diese Weise können Sie die Arbeitsblätter nur 2 oder 3 Mal bearbeiten. Dies ist die Hauptverlangsamung sowie die Verwendung von '.Select'. –

Antwort

0

.Select verbrauchen eine Menge Ressourcen. Eine bessere Möglichkeit, Ihren Code auszuführen, ist die Verwendung von Arrays. Stellen Sie sicher, dass Sie einen anderen Array-Typ als Variant definieren, um den Speicherverbrauch zu reduzieren.

+0

Dies ist mehr ein Kommentar als eine Antwort. –

+0

Oh, hab es! Vielen Dank, ich werde es zu Arrays ändern – menhadon