Ich habe mir folgendes Makro zusammengebastelt:
Sub new_month()
Application.ScreenUpdating = False
Dim Nmonth, Omonth As String
Dim x, y As Integer
Dim position, länge, inhalt As String
Nmonth = InputBox("Welcher Monat?")
Nmonth = Format(Nmonth, "00")
anfang = Time()
x = Cells.SpecialCells(xlLastCell).Row
y = Cells.SpecialCells(xlLastCell).Column
For i = 1 To 20 'x
For j = 1 To 12 'y
position = InStr(1, Cells(i, j).Formula, "!", vbTextCompare)
länge = Len(Cells(i, j).Formula)
inhalt = Right(Cells(i, j).Formula, länge - position)
Cells(i, j).Formula = "='L:\Finanz\monthend\2008\" & Nmonth & "\[SAP wages.xls]SAP wages'!" & _
inhalt
Next
Next
ende = Time()
dauer1 = (ende - anfang) * 60 * 24 * 60
anfang = Time()
Omonth = Range("A1").Formula
Omonth = Replace(Omonth, "='L:\Finanz\monthend\2008\", "")
Omonth = Replace(Omonth, "\[SAP wages.xls]SAP wages'!C3", "")
Range("A1:L20").Replace What:=Omonth, Replacement:=Nmonth, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Application.ScreenUpdating = True
ende = Time()
dauer2 = (ende - anfang) * 60 * 24 * 60
MsgBox ("For-Next: " & dauer1 & " --- Replace: " & dauer2 & " --- Differenz: " & dauer2 - _
dauer1)
End Sub
Ich habe die Zeitfunktionen zur Analyse der Schnelligkeit der beiden "Suchen-und-Ersetzen"-Funktionen eingebaut. Dabei habe ich festgestellt, dass die Zeiten der beiden Verianten sich ständig verändern. Mal ist eine Funktion 1 Sekunde, mal 2 Sekunden langsamer, mal sind beide gleich. Kann mir jemand erklären, warum?
Und was noch wichtiger ist: In dem Makro werden momentan nur die ersten 20 Zeilen bearbeitet. Das Blatt hat aber 2000 Zeilen, zukünftig evtl. noch mehr (bis zu 4000). Sieht jemand eine Möglichkeit, das zu beschleunigen? Im "günstigsten" Fall brauche ich sonst rund 8 Minuten.
Danke schon mal.
Gruß
David