Schleifen in VBA bei diesem Beispiel

  • Excel

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Schleifen in VBA bei diesem Beispiel

    Ich brauche eure Hilfe bezüglich einer Aufgabe in VBA und komme dort einfach nicht weiter.

    Aufgabe lautet folgendermaßen: Es geht um eine Schnecke welche eine 4,5 Meter hohe Mauer hoch klettern soll, diese klettert jeden Tag 50 cm nach oben, in jeder Nacht rutscht sie 10% ihrer Gesamthöhe wieder nach unten. Wann bzw nach wievielen Tagen wäre sie oben?

    kann mir jemand schnell helfen?
    Hab das mal in VBA eingegeben
    Option Explicit

    Sub Schnnecke()

    Dim HöheMauer As Double
    Dim HöheSchnecke As Double
    Dim AnzahlTage As Integer

    HöheMauer = 4.5
    HöheSchnecke = 0
    AnzahlTage = 0

    Do Until HöheSchnecke = 4.5

    DoEvents


    HöheSchnecke = Int((HöheSchnecke + 0.5) + 0.1)


    Loop


    End Sub

    Vielen lieben dank euch schonmal
    Willkommen im Forum.
    Bitte CodeTags verwenden.
    DoEvents? Die Berechnung dauert keine halbe Sekunde. Daher kannst Du darauf verzichten.
    Wo ist die Hochzählung der Tage? Die fehlt.

    Visual Basic-Quellcode

    1. Do Until HöheSchnecke = 4.5
    Mach lieber >= 4.5, sonst kann es sein, dass die Schnecke weiterkommt, aber das Programm das nicht mitbekommt. Dann wirst Du für seeehr lange Zeit das DoEvents brauchen.
    Wo ist die Ausgabe der Tage?

    Visual Basic-Quellcode

    1. HöheSchnecke = Int((HöheSchnecke + 0.5) + 0.1)
    Warum + 0,1? Das ist eine Absolutangabe. Aber Prozenze sind doch relativ zu einem Wert. Außerdem kommt sie ja nicht 10% schneller voran, sondern verliert an Strecke.
    Wozu hast Du die Höhe der Mauer definiert, wenn Du die entsprechende Variable nicht nutzt?
    Das Int bei HöheSchnecke = Int... wird Dir ganz schön reingrätschen, weil es bei der Berechnung Dein mühevoll berechnetes Ergebnis immer zu Null macht.
    Reicht das als Info für den Anfang?

    btw: Nein, Komplettlösungen sind gerade ausverkauft ;)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Noch ein kleiner Tipp, da ich die Aufgabe späßleshalber mal "gelöst" habe: In die Do-Schleife sollte aus gegebenen Anlass noch eine passende Abbruchbedingung rein. Mal sehen, wie schnell Du drauf kommst, welche das ist und warum Du sie brauchst ;)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Option Explicit

    Sub Schnecke()

    Dim Zielhoehe As Double
    Dim Starthoehe As Double
    Dim Isthoehe As Double
    Dim Hoeheprotag As Double
    Dim Rutschpronacht As Double
    Dim Anzahltag As Double

    Zielhoehe = 4.5
    Starthoehe = 0
    Isthoehe = 0
    Hoeheprotag = 0.5
    Rutschpronacht = 0.1
    Anzahltag = 0

    Do

    DoEvents

    Anzahltag = Anzahltag + 1
    Isthoehe = Isthoehe + Hoeheprotag

    If Isthoehe >= Zielhoehe Then

    MsgBox "Schnecke ist am " & Anzahltag & ". Tag angekommen"

    Exit Do

    End If

    Isthoehe = Isthoehe - (Isthoehe * Rutschpronacht)
    If Isthoehe < 0 Then Isthoehe = 0

    Loop

    End Sub


    ist auf einem Macbook nicht so leicht aber jetzt sollte es hoffentlich passen
    hab nen anderen ansatz genommen mit mehr variablen, wäre wahrscheinlich schneller auch gegangen^^
    Ja, das dachte ich auch. Allerdings bei mir nur deshalb, weil ich Vorwärtskommen und Verlust gleichzeitig berechnet habe. Und nicht die Auftrennung von Tag und Nacht berücksichtigt habe. Erst kommt sie voran. Und danach erst rutscht sie 10% in der Nacht ab. Daher schafft sie es irgendwann eben doch.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.