Code Optimierung (Geschwindigkeit + Funktion)

  • Excel

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Code Optimierung (Geschwindigkeit + Funktion)

    Hey,

    habe vor einiger Zeit folgenden Code geschrieben.

    Quellcode

    1. Do While Not IsEmpty(Sheets("Uebersicht").Cells(i, 1))
    2. If Sheets("Uebersicht").Cells(i, 2) = name Then
    3. Sheets("Uebersicht").Cells(i, 20).Copy Destination:=Worksheets("Auswertung" & name).Cells(n, 1) 'Gewicht
    4. Sheets("Uebersicht").Cells(i, 66).Copy Destination:=Worksheets("Auswertung" & name).Cells(n, 2) Tag
    5. Sheets("Uebersicht").Cells(i, 64).Copy Destination:=Worksheets("Auswertung" & name).Cells(n, 3) Monat
    6. Sheets("Uebersicht").Cells(i, 67).Copy Destination:=Worksheets("Auswertung" & name).Cells(n, 4) 'Jahr
    7. Sheets("Uebersicht").Cells(i, 63).Copy Destination:=Worksheets("Auswertung" & name).Cells(n, 5) 'Alter
    8. n = n + 1
    9. End If
    10. i = i + 1
    11. Loop


    Nicht schön und sicher nicht effektiv, aber da es funktionierte und da es nur ein kleiner Teil des Scripts ist, habe ich nichts mehr daran rumgebastelt.
    Nun ist aber das Problem aufgetreten, dass in vielen Zeilen einer der Daten ( z.B. Gewicht) nicht eingegeben wurde.
    Die zusätzliche Anforderung an den Code ist jetzt, diese Zeilen einfach zu Überspringen und mit der nächsten Weiterzumachen.
    Wie ist dies am einfachsten und Ressourcen schonendsten du bewerkstelligen? (Gerade der letzte Punkt würde mich interessieren und hier habe ich einfach zu wenig Erfahrung damit...)

    d-j-h schrieb:

    Die zusätzliche Anforderung an den Code ist jetzt, diese Zeilen einfach zu Überspringen und mit der nächsten Weiterzumachen.


    kannst du das nicht mit einer If-Schlaufe machen?


    und in deinem Code fehlt bei Zeile 3 und 4 vor der Beschreibung (Tag, Monat) ein '
    Gruss Mirco

    kannst du das nicht mit einer If-Schlaufe machen?


    Von der IF Abfrage wollte ich eigentlich weg kommen. Dann müsste ich die Zellen ja vorher schon "anschauen" ob sie leer sind.
    Hab mir gedacht das geht vlt alles irgendwie schneller und schöner

    d-j-h schrieb:

    Dann müsste ich die Zellen ja vorher schon "anschauen" ob sie leer sind.
    Das dürfte keine Performanceverluste auslösen.
    Da dürfte dein .Copy-Mechanismus zeitfressender sein.
    Versuchs lieber mit Wertzuweisung, anstatt die ganze Zelle zu kopieren.

    Aber wenn du's schöner haben willst:

    Visual Basic-Quellcode

    1. For Each c In Intersect(Range("A:A"), UsedRange.SpecialCells(xlCellTypeConstants))
    2. Sheets("Auswertung" & Name).Cells(n,1).Value = c.Offset(0,19).Value
    3. ...
    4. Next
    Im übrigen ist die Wiederverwertung der vom Sheet vorbelegten Property Name nicht besonders elegant.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --