Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1772to1776
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

Norm_S_Inv spuckt fehlerwert aus

Norm_S_Inv spuckt fehlerwert aus
26.07.2020 10:47:17
Theo
Hallo zusammen,
ich wollte eine zufällig generierte Zahl standart normalverteilen u eine geometric Brownian _ Motion zu simulieren. Leider funktioniert der "einfachste Teil" daran nicht. Die erzeugung der Zahl. Hier mein code und untendrunter die Fehlermeldung.

Sub zufallszahltest()
Dim zufalls_return As Double
Dim zufalls_zahl As Double
zufalls_zahl = Application.WorksheetFunction.RandBetween(0, 1)
zufalls_return = Application.WorksheetFunction.Norm_S_Inv(zufalls_zahl)
MsgBox zufalls_return
End Sub

Userbild
Ich verstehe nicht wieso das nicht funktioniert? Auf dem Arbeitsblatt bekomme ich mit exakt den selben Formeln super Ergebnisse.
Wenn wir schon mal dabei sind. Wann benutze ich "Application.", "Application.WorksheetFucntion." oder nur "Worksheetfunction."? Vielen dank und schönen Sonntag,
Theo

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Norm_S_Inv spuckt fehlerwert aus
26.07.2020 11:35:50
Theo
Nochmal zur Erklärung. Eigentlich will ich nur die Formeln =NORM.S.Inv(ZUFALLSZAHL()) in vba nachbauen. Hätte nicht gedacht, dass das kompliziert ist. Ich verwende oben genannte Formel in einer Schleife die ungefähr 300 * 10000 abläuft. Kann es sein, dass einfach irgendwann eine Null generiert wird und Norm.S.Inv damit nicht umgehen kann? Ich dachte die generierte Zahl sei immer >0 und Gruß,
Theo
AW: Norm_S_Inv spuckt fehlerwert aus
26.07.2020 11:53:49
volti
Hallo Theo,
ich habe zwar keine Ahnung, was Du da machst, aber versuche es doch mal so:
Sub zufallszahltest()
 Dim zufalls_return As Double
 Dim zufalls_zahl As Double

 zufalls_zahl = Application.WorksheetFunction.RandBetween(0, 100)
 If zufalls_zahl > 0 Then
    zufalls_return = Application.WorksheetFunction.Norm_S_Inv(zufalls_zahl / 100)
 End If
 MsgBox zufalls_return

End Sub

viele Grüße
Karl-Heinz
Anzeige
AW: Rand darf nicht 0 oder 1 werden
26.07.2020 12:25:57
Sulprobil
Hallo,
die Funktion Norm.S.Inv will Werte >0 und Randbetween(0,1) erzeugt ganze Zahlen zwischen 0 und 1. Du erzeugst also genau diejenigen, die Fehlerwerte in der Norm.S.Inv hervorrufen.
Randbetween(0,100) durch 100 teilen wäre ganz nett wenn man Randbetween(1,99) nutzt.
Ich hätte aber einfach so etwas wie
Randomize
z = Rnd()
If z=0# Then z=0.5 'Irgendwas >0 und 

genommen.
AW: Rand darf nicht 0 oder 1 werden
26.07.2020 12:39:12
Theo
Hallo,
das habe ich mir schon gedacht. Gibt es denn kein vba pondon zur ZUFALLSZAHL() Formel?
Gruß,
Theo
=RAND()?
26.07.2020 12:54:03
lupo1
(aufgepasst bei den Unterschieden, denn RAND() scheint zu wiederholen, wo RANDBETWEEN() besser neue zufällige bringt)
Googeln.
Anzeige
AW: Randomize und Rnd reicht
26.07.2020 13:09:41
Sulprobil
jedenfalls mir :-)
AW: Doch: Rnd() :-)
26.07.2020 13:07:24
Sulprobil
Sicher?
26.07.2020 12:52:26
lupo1
=RANDBETWEEN(1,99) hätte nur 99 Werte. Vielleicht soll aber ja zumindest DISKRET der Raum von 100 Werten erreicht werden: =RANDBETWEEN(0,99)
(habe den restlichen Thread nicht gelesen)
AW: Ja
26.07.2020 13:10:09
Sulprobil
AW: Sicher?
26.07.2020 13:21:22
volti
Hi Lupo,
nirgendwo im Beitrag von Theo steht, dass es 100 Zahlen sein sollen (das hatten wir einfach mal so festgelegt), sondern Kommazahlen zwischen 0 und 1.
0 und 1 sind dabei verboten, also wäre je nach gewünschter Kommastellentiefe auch eine komprimierte
Version denkbar.
Sub zufallszahltest()
 Dim zufalls_return As Double

 zufalls_return = Application.WorksheetFunction.Norm_S_Inv( _
                  Application.WorksheetFunction.RandBetween(1, 10000) / 10000)
 
 MsgBox zufalls_return

End Sub
viele Grüße
Karl-Heinz
Anzeige
AW: Sicher?
26.07.2020 13:26:18
volti
Mist, jetzt habe ich mich selbst auch noch vertan.
Sub zufallszahltest()
 Dim zufalls_return As Double

 zufalls_return = Application.WorksheetFunction.Norm_S_Inv( _
                  Application.WorksheetFunction.RandBetween(1, 99999) / 99999)
 
 MsgBox zufalls_return

End Sub
VG KH
Anzeige
AW: Kleine Korrektur
26.07.2020 13:42:38
Sulprobil
zufalls_return = Application.WorksheetFunction.Norm_S_Inv( _
Application.WorksheetFunction.RandBetween(1, 99999) / 100000)
Du willst keine 1 als Eingabe haben.
AW: Kleine Korrektur
26.07.2020 13:48:58
volti
Wenn der Wurm drin ist.....
Danke für die Korrektur.
AW: Kleine Korrektur
26.07.2020 15:15:38
Theo
So, nachdem jetzt auch mein Internet eine weile weg war. Viele Dank, das hat funktioniert!! Wer interesse hat,
myRand = Rnd()
Do Until (myRand  0 And myRand  1)
myRand = Rnd()
Loop
zufalls_return = WorksheetFunction.Norm_S_Inv(myRand)
Diese Lösung hab ich auch noch gefunden, hat auch funktioniert. Danke mal wieder an das Forum und schönen Sonntag
Anzeige
AW: Norm_S_Inv spuckt fehlerwert aus
26.07.2020 12:29:41
Theo
Hey Karl-Heinz,
danke für die Hilfe aber das ist nicht ganz die Zahl die ich erzeugen möchte. Die ZUFALLSZAHL() Formel erzeugt eine Kommazahl zwischen 0 und 1. Dafür habe ich einfach keine passende VBA Formel gefunden. Komischerweise funktioniert die Formel wenn ich einfach nur eine array mit 300*10000 Ergebnissen fülle. Wenn ich das ganze aber in meinen code einbaue kommt die oben genannte Fehlermeldung.
Gruß,
Theo

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige