Herbers Excel-Forum - das Archiv

Zufallszahlen mit rnd() - was für profis

Bild

Betrifft: Zufallszahlen mit rnd() - was für profis
von: Matthias

Geschrieben am: 20.02.2005 18:48:03
hi zusammen,
ich habe mir mit vba einen code gebastelt der über rnd() laufend 9 zufallszahlen generiert. diese müssen in der summe 1 (bzw.100%) ergeben. leider liefert der code von mir nur rund 100 verschiedene lösungen - bei x durchläufen - sprich excel findet immer nur die gleichen lösungen. an was kann das liegen - denn wenn ich das ganze auf 4 zufallszahlen reduziere liefert er mir x lösungen für x durchläufe. danke für die hilfe
matthias
der code ist im beiligenden excelsheet zu finden.
https://www.herber.de/bbs/user/18383.xls
Bild

Betrifft: AW: Zufallszahlen mit rnd() - was für profis
von: Udo
Geschrieben am: 20.02.2005 19:25:09
Verwende Randomize
Udo
Bild

Betrifft: randomize aber wie? und wo?
von: matthias

Geschrieben am: 21.02.2005 11:36:50
hi das mit randomize funktioniert nicht so richtig. er rechnet länger aber die ergebnisse sind immer noch doppelt. wie verwende ich randomize richtig. danke
Sub zufallszahl()
Dim i1 As Variant
Dim i2 As Variant
Dim i3 As Variant
Dim i4 As Variant
Dim i5 As Variant
Dim i6 As Variant
Dim i7 As Variant
Dim i8 As Variant
Dim i9 As Variant
Dim n As Integer
Dim a As Integer
Sheets("tabelle1").Activate
For n = 1 To 500
a:
Randomize
i1 = Rnd()
i2 = Rnd()
i3 = Rnd()
i4 = Rnd()
i5 = Rnd()
i6 = Rnd()
i7 = Rnd()
i8 = Rnd()
i9 = 1 - i1 - i2 - i3 - i4 - i5 - i6 - i7 - i8
If i9 < 0 Then GoTo a Else
Range("a" & n).Value = i1
Range("b" & n).Value = i2
Range("c" & n).Value = i3
Range("d" & n).Value = i4
Range("e" & n).Value = i5
Range("f" & n).Value = i6
Range("g" & n).Value = i7
Range("h" & n).Value = i8
Range("i" & n).Value = i9
Next n
End Sub

Bild

Betrifft: AW: Zufallszahlen mit rnd() - was für profis
von: Fred
Geschrieben am: 20.02.2005 21:38:38
Das ist so gut wie unmöglich, dass du jemals auf 1 kommst, denk mal darüber nach.
Fred
Bild

Betrifft: AW: Zufallszahlen mit rnd() - was für profis
von: gunter

Geschrieben am: 23.02.2005 15:04:55
Eine kleine Ergänzung zum deinem Zufallszahlenproblem...
probier doch mal folgendes:
(Die Konstante "Max" gibt die angestrebte Summe an, "anzahl" steht für die Anzahl der Zahlen, die diese Summe bilden sollen... viel Spaß)
Option Explicit
Sub zufi()
Dim zufiarray(1 To 13) ' Obergrenze muß gleich "anzahl" sein
Const Max = 100
Const anzahl = 10
Erase zufiarray
Dim i, j, x, zufallsrahmen, zufallszahl, summe, rest As Integer
rest = Max
Do
For j = 1 To anzahl
Randomize
zufallsrahmen = Int((rest) * Rnd) + 1 'reduziert den Effekt, daß die ersten Zahlen auch die größten sind
zufallszahl = Int((zufallsrahmen * Rnd) + 1)
summe = 0
For i = 1 To anzahl
summe = summe + zufiarray(i)
Next i
If Not summe + zufallszahl > Max Then
zufiarray(j) = zufiarray(j) + zufallszahl
rest = rest - zufallszahl
End If
Next j
If summe = Max Then 'sicherstellen, daß kein Wert = 0 ist
For x = 1 To anzahl
If zufiarray(x) = "" Then
Erase zufiarray
rest = Max
summe = 0
End If
Next x
End If
Loop Until summe = Max
'For i = 1 To anzahl
'    Cells(1, i) = zufiarray(i)
'Next i
End Sub

 Bild
Excel-Beispiele zum Thema "Zufallszahlen mit rnd() - was für profis"
Zufallszahlen generieren, die sich nicht wiederholen Gleiche Zufallszahlen zählen und in Diagramm anzeigen
Zufallszahlen bis zum 4-fachen Wert generieren