AW: Schleifen und Geschwindigkeit
07.11.2017 12:52:16
Daniel
Hi
du hast in dem Code mehrfach zwei in einander geschachtelte Schleifen.
Die solltest du mal überprüfen, ob die überhaupt notwendig.
Außerdem solltest du bei den Doppelschleifen alle Aktionen in der inneren Schleife überprüfen, ob diese nicht in die äußere Schleife gehören.
Hinweiszeichen ist immer, ob der Schleifenzähler der inneren Schleife eine Rolle bei der Aktion spielt, bzw verändert sich die Aktion während des Schleifendurchlaufs.
Wenn nein, gehört die aus der Schleife raus, denn wenn die Aktion in der Schleife immer genau gleich ausgeführt wird, muss man sie nicht wiederholt ausführen lassen sondern einmal reicht.
Überflüssig sind auch solche Schleifen, die du durch eine Formel ersetzen kannst.
Wenn du das per Formel machst, kannst du alle Zellen in einem Schritt bearbeiten.
In der Schleife wird jede Zelle einzeln bearbeitet, was wesentlich aufwendiger ist.
(Wenn du einkaufen gehst, dann fährst du ja auch nur 1x zum Supermarkt und kaufst dort alle zusammen ein und bezahlst alles zusammen, wenn du für jeden Artikel einzeln gehst, dauert es viel länger bis du alles hast.
Beispiel:
Langsam ist:
With ThisWorkbook.Sheets("SAP_Adjusted")
For c = 2 To i
If .Range("D" & c).Value = "keine Übereinstimmung" Then
.Range("E" & c).Value = "kein Wert"
Else
.Range("E" & c).Value = .Range("D" & c).Value * ThisWorkbook.Sheets("SAP_Import").Range( _
"H" & c).Value
End If
Next
End With
geht viel schneller so:
With ThisWorkbook.Sheets("SAP_Adjusted").Range("E2:E" & i")
.FormulaR1C1 = "=IF(RC4=""keine Übereinstimmung"",""kein Wert"",RC4*'SAP_Import'!RC8)"
.Formula = .Value
end with
das ist nicht nur kürzer und schneller, sondern lässt sich auch viel angenehmer in Einzelstepmodus testen.
Gruß Daniel