Thema Datum  Von Nutzer Rating
Antwort
11.12.2015 10:09:11 Robert
NotSolved
Blau VBA script auf neuem Laptop extrem langsam
11.12.2015 17:45:28 Gast97140
NotSolved
14.12.2015 11:04:54 Gast17353
NotSolved

Ansicht des Beitrags:
Von:
Gast97140
Datum:
11.12.2015 17:45:28
Views:
862
Rating: Antwort:
  Ja
Thema:
VBA script auf neuem Laptop extrem langsam

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ß

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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

 


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
11.12.2015 10:09:11 Robert
NotSolved
Blau VBA script auf neuem Laptop extrem langsam
11.12.2015 17:45:28 Gast97140
NotSolved
14.12.2015 11:04:54 Gast17353
NotSolved