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

Beiträge aus den Excel-Beispielen zum Thema "Zufallszahlen mit rnd() - was für profis"