Thema Datum  Von Nutzer Rating
Antwort
Rot Probleme mit DO Until Schleife
11.05.2016 19:54:11 Alex Neuhaus
NotSolved

Ansicht des Beitrags:
Von:
Alex Neuhaus
Datum:
11.05.2016 19:54:11
Views:
994
Rating: Antwort:
  Ja
Thema:
Probleme mit DO Until Schleife

Hallo zusammen,

ich versuche eine normalverteilte Nachfrage in Excel zu erstellen, welche bestimmte Eigenschaften einhält.

Es handelt sich um eine Nachfrage mit 4 Perioden und 2 Produkten. Folglich also eine 4x2 Matrix mit Kapazitän in jeder Periode.

Es soll zum Ende jeder Periode gelten: kumulierte Kapazitäten<=kum Nachfrage. Das heißt in einer oder mehrere Perioden kann es durchaus gelten, dass Nachfrage > Kapazitäten(außer in der ersten) ist. Die Kapazitäten habe ich bereits erstellt und lese diese aus den entsprechenden Zellen aus. Die Varianz soll dabei zur jeder Periode verändert werden.

Ich verwende die Polarmethode hier um die Nachfrage zu erstellen.

Kurze Anmerkung: Ich weiß nicht warum aber mit Rnd hat die cv immer die selben Werte geliefert.

Mein zentrales Problem ist: Die Do Until Schleife wird zweimal aufgerufen und nicht wird immer die Condition (kumCapacity <= kumDemand Or capacity(pos) <= sumDemand) eingehalten. Leider komme ich mit dem Debug-Tool von VBA nicht so gut klar, sodass ich nicht nachvollziehen kann voran es happert.

Danke vorab für die Hilfe!!!!

Hier mein Ansatz:

Sub calcDemand()
Dim i, j As Integer
Dim cv(3) As Double, sigma As Integer

Dim capacity(3) As Integer
For i = 0 To 3
    capacity(i) = Cells(7 + i, 3).Value
Next i

Dim temp As Double
For i = 0 To 3
    temp = calcRandom()
    cv(i) = Application.WorksheetFunction.Round(temp, 2)
Next i

Dim a1, a2, q, p, z1, z2 As Double
Dim pos As Integer

Dim demand(3) As Double
Dim sumDemand, kumCapacity, kumDemand As Integer
sumDemand = 0
kumCapacity = 0
kumDemand = 0

For i = 0 To 7 Step 2
    Do
    pos = i - i / 2
    kumCapacity = kumCapacity + capacity(pos)
        Do
                temp = 100 * cv(pos)
                a1 = 2 * Rnd - 1
                a2 = 2 * Rnd - 1
                q = a1 * a1 + a2 * a2
        Loop Until q > 0 And q <= 1
                p = Sqr(-2 * Log(q) / q) ' Log() ist in VBA der natürliche Logarithmus!
                z1 = a1 * p * temp + 100
                z2 = a2 * p * temp + 100
                z1 = Application.WorksheetFunction.Round(z1, 0)
                z2 = Application.WorksheetFunction.Round(z2, 0)
                Cells(7 + pos, 1) = z1
                Cells(7 + pos, 2) = z2
                sumDemand = sumDemand + z1 + z2
                demand(pos) = sumDemand
    Loop Until kumCapacity <= kumDemand Or capacity(pos) <= sumDemand
                sumDemand = 0
                kumDemand = kumDemand + demand(pos)
Next i
End Sub


Function calcRandom() As Double
Dim random As Double
random = Rnd
calcRandom = random
End Function


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
Rot Probleme mit DO Until Schleife
11.05.2016 19:54:11 Alex Neuhaus
NotSolved