Anzeige
Archiv - Navigation
1572to1576
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

2 Schleifen ineinander mit Zufallsformel

2 Schleifen ineinander mit Zufallsformel
19.08.2017 22:50:07
Lucas
Hallo zusammen,
Ich möchte eine Art Monte-Carlo Simulation erstellen via Makro.
Dazu habe ich folgenden Code geschrieben:
Sub Schleife()
Dim n As Long
Dim pOne As String
Dim pTwo As String
Dim i As Long
Dim sFormula As String
Dim WSQuelle As Worksheet
Dim WSZiel As Worksheet
Dim WBK As Workbook
Set WSQuelle = Worksheets("Test")
Set WSZiel = Worksheets("Parameter")
n = WSQuelle.Cells(2, 6)
pOne = WSQuelle.Cells(3, 6)
pTwo = WSQuelle.Cells(4, 6)
sFormula = "=NORM.INV(Rand()," & pOne & "," & pTwo & ")"
WSZiel.Cells(15, 8) = sFormula
Dim G As Double
Dim j As Variant
Dim k As Integer
G = Cells(55, 2)
For j = 1 To 10
Cells(60 + j, 1).Value = G
For k = 1 To 10
Cells(15, 8) = sFormula
Next k
Next j
End Sub
In Zelle(15, 8) werfe ich eine Formel mit Zufallkomponente rein. Mit der Zahl wird in Excel weitergerechnet und am Ende kommt in Zelle(55,2) ein Ergebnis raus.
Diesen Schritt möchte ich n mal wiederholen mit jeweils einem neuen Zufallswert und einem neuen Ergebnis. Die Ergebnis sollen dabei untereinander gespeichert werden.
Mein Problem ist jedoch, dass die Zufallsfunktion während der Rechenprozedur nicht updatet und n mal das selbe Ergebnis rauskommt.
Weiß jemand Rat? Ich wäre euch sehr dankbar.
Beste Grüße
Lucas

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: 2 Schleifen ineinander mit Zufallsformel
19.08.2017 23:47:53
Christian
Hi Lucas,
wenn ich das laufen lasse bekomme ich bei jedem Schleifendurchlauf
einen anderen Wert aus der Formel, d.h. =rand() liefert.
Setz mal ein Breakpoint in die Schleife, und schau dir nochmal genau an, was du da treibst...
Mir scheint, das dort der Knackpunkt liegt.
VG, Christian
AW: 2 Schleifen ineinander mit Zufallsformel
20.08.2017 10:51:36
Lucas
Hey Christian.
Vielen Dank, du hattest recht irgendwas stimmt mit der schleife nicht. Bin noch recht ungeübt im Umgang damit. Die Schleife muss folgendermaßen aussehen:
Dim j As Variant
For j = 1 To n
Cells(60 + j, 1).Value = Cells(55, 2)
With Cells(15, 8) = sFormula
End With
Next j
End Sub
Gruß Lucas
Anzeige
AW: 2 Schleifen ineinander mit Zufallsformel
20.08.2017 11:00:39
Sepp
Hallo Lucas,
dein Code ist wirr und sinnlos!
Beschreie doch einfach, was du genau erreichen willst.
Gruß Sepp

AW: 2 Schleifen ineinander mit Zufallsformel
20.08.2017 15:20:51
Piet
Hallo Lucas,
warum erzeugst du Zufallszahlen per Formeln, die berechnet werden müssen, wenn es in Vba die Funktion Random gibt?
Anbei ein Codeschnippsel der dir 30 Zufallszahlen in Spalte B erzeugt, einstellbar über Const Zufall = 30
Das ganze im 2. Makro erweitert auf 10 Spalten, wo zwei For Next ineinander laufen!
Ich gehe davon aus das du programmieren kannst, und nur einen gedanklichen "Anstupser" brauchst.
Würde mich freuen wenn dir dieser Code beim selbst entwickeln weiterhilft.
mfg Piet
Const Zufall = 30
Sub Zufall_Spalte_B()
Sheets(1).Select
Range("B1:B100") = Empty
Randomize  'Zufall starten
'Schleife Zufalls Werte kopieren
For j = 1 To Zufall
neu:     x = CInt((Zufall - 1) * Rnd) + 1
If Cells(x, 2)  "" Then GoTo neu
'Zufallszahl j über x
Cells(x, 2) = j
Next j
End Sub
Sub Zufall_über_10_Spalten()
Sheets(1).Select
Range("B1:L100") = Empty
Randomize  'Zufall starten
For k = 2 To 11  'Spalte 2-11
'Schleife Zufalls Werte kopieren
For j = 1 To Zufall
neu:       x = CInt((Zufall - 1) * Rnd) + 1
If Cells(x, k)  "" Then GoTo neu
'Zufallszahl j über x
Cells(x, k) = j
Next j
Next k
End Sub

Anzeige
AW: 2 Schleifen ineinander mit Zufallsformel
20.08.2017 18:36:25
Lucas
Hallo zusammen!
Ich will normalverteilte Werte in mein Modell werfen, die ein gewissee Schwankungsbreite beinhalten, daher die Rand() Funktion in der Formel.
Mit jedem dieser schwankenden Eingangwerte wird in meinem Excelmodell weitergerechnet und ich erhalte ein Ergebnis. Diesen Vorgang wiederholen ich 100-100000 mal. Die Ergebnisse möchte ich dann auflisten und statistisch auswerten.
Mein Code sieht so aus:
Sub Schleife()
Dim n As Long
Dim pOne As String
Dim pTwo As String
Dim i As Long
Dim sFormula As String
Dim WSQuelle As Worksheet
Dim WSZiel As Worksheet
Dim WBK As Workbook
Dim gRange As Range
Dim Zeilenanzahl As Variant
Set WSQuelle = Worksheets("Test")
Set WSZiel = Worksheets("Parameter")
n = WSQuelle.Cells(2, 6)
pOne = WSQuelle.Cells(3, 6)
pTwo = WSQuelle.Cells(4, 6)
sFormula = "=NORM.INV(Rand()," & pOne & "," & pTwo & ")"
Zeilenanzahl = WSQuelle.Cells(Rows.Count, 2).End(xlUp).Row
WSQuelle.Range(Cells(11, 2), WSQuelle.Cells(Zeilenanzahl, 2)).ClearContents
Dim j As Variant
For j = 1 To n
WSQuelle.Cells(10 + j, 2).Value = WSZiel.Cells(55, 2)
With WSZiel.Cells(15, 8) = sFormula
End With
Next j
Set gRange = WSQuelle.Range(Cells(11, 2), WSQuelle.Cells(n + 11, 2))
avg = Application.WorksheetFunction.Average(gRange)
mini = Application.WorksheetFunction.Min(gRange)
maxi = Application.WorksheetFunction.Max(gRange)
Cells(7, 2) = avg
Cells(3, 2) = mini
Cells(5, 2) = maxi
End Sub
Die Berechnung der Ergebnisse funktioniert problemlos. Ich hab nun allerdings das Problem, dass die Average-Funktion den Laufzeitfehler 1004 (Die Average Eigenschaft des WorksheetFunktion-Objektes kann nicht zugeordnet werden) ausspuckt.
Das passiert allerdings nur ab 1000 Ergebniswerten, bei 100 Ergebniswerten läuft die Berechnung des Mittelwertes noch problemlos. Habt ihr einen Tipp wie ich den Fehler umgehen kann oder einen anderen weg wie ich die Mittelwerte aus meine Ergegnisrange(gRange) ziehen kann? Liegt es möglicher weiße an der Rechendauer der Schleife davor?
VG
Lucas
Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige