Hallo Robert! Also habe mal deinen Code zusammengefasst. Da ich nicht die Datengrundlage wie du habe, konnte ich keinen Durchlauf mit 10000 Schleifen machen. :-) Kann also zur Laufzeit nichts sagen. Müsstest du halt ggf. mal selber testen.
Zum Code noch.
2 Variablen habe ich umbenannt - gab da bei mir Probleme. Die Namen Month und Day sind eigentlich Methodennamen und schlecht für Variablen. Habe sie deshalb in monat und tag umbenannt. Deine Ifs am Anfang such ja eigentlich nur den Monat in Abhängigkeit vom laufenden Tag (jday) und dann noch den Tag im Monat. Habe ich durch eine Berechnung ersetzt. Wobei dein/mein Code wohl nur funtkioniert, wenn kein Schaltjahr ist - da wäre der Februar ja 29 TAge lang.
Dann habe ich dir noch was in grüne (Kommentare) reingeschrieben. Da sind eine Variable und 2 Rückgaben an Zellen m.E. zuviel. Außer du greifst da später nochmal drauf zu. Die könnte auch weg. Dann wären etliche Vergleiche (zum Jahresende hin) und 2 Rückgaben schonmal weg. Ob meine Berechnung die selbe Zeit kosten oder langsamer sind, weiß ich nicht. Für mehr Optimierungen, müsste man ggf. den ganzen Code sehen und schauen, was noch weg könnte.
Gruß
For i = 1 To leZeile - 1
With Workbooks(1).Worksheets(sheetname)
tmin = .Cells(i + 1, 9)
tmax = .Cells(i + 1, 10)
jday = .Cells(i + 1, 5)
If tmin = 9999 Or tmax = 9999 Then
tmean = 9999
Else: tmean = (tmin + tmax) / 2
End If
.Cells(i + 1, 11) = tmean
If month_col = 0 Then
' berechnet dir den Tag und den Monat ohne die vielen if - variablenname war suboptimal
If jday > 0 And jday < 366 Then
monat = Month((DateAdd("d", jday - 1, "01.01.2015")))
tag = CDate(DateAdd("d", jday - 1, "01.01.2015")) - DateSerial(2015, monat, 0)
Else
MsgBox "JDAY not valid"
End If
'ist daa Schreiben in die Zellen hier wirklich notwendig?? wird ja nur für die Variable datum benutzt.
'wäre nicht auch möglich, datum wegzulassen und die nächsten 4 Codezeilen durch die hier zu ersetzen
' .Cells(i + 1, 4).Value = tag & "." & monat
.Cells(i + 1, 1).Value = tag
.Cells(i + 1, 2).Value = monat
End If
datum = .Cells(i + 1, 1).Value & "." & .Cells(i + 1, 2).Value
.Cells(i + 1, 4).Value = datum
' also bis hier könnte mit der Zeile im Kommentar oben alles weg - end if aber lassen
If .Cells(i + 1, 8) = 9999 Then
If i > 1 Then
If .Cells(i + 1, 7) < 9999 Then
pseudo_snow = .Cells(i + 1, 7) - .Cells(i, 7)
If pseudo_snow >= 0 Then
.Cells(i, 8) = pseudo_snow
Else: .Cells(i, 8) = 0
End If
End If
End If
End If
End With
|