Frage von ettlinbay, 59

Zufallszahlen mit Excel?

Oder wie kann ich diese Formel dahin gehend ändern, daß erst ein Ergeniss nach 432 Ziehungen gezeigt wird. Dank

Sub Zufallszahl() Dim Wert1, wert02, wert03, wert04, wert05, wert06 Dim z1, z2, z3, z4, z5, z6 Randomize ' Zufallszahlengenerator initialisieren. z1 = Int((432 * Rnd) + 1) wert01 = Range("a" & z1).Value Range("d3").Value = wert01 Randomize

End Sub

Expertenantwort
von Oubyi, Community-Experte für Excel, 43

Was für Ziehungen?
Für mich reicht der Schnipsel nicht um das zu verstehen.
(Du solltest für Code hier übrigens auch "Codebeispiel einfügen" des Editors nutzen, dann muss das nicht jeder selber auseinanderdröseln.)
Du erzeugst hier Zufallszahlen zwischen 1 und 432 und liest den Wert aus der entsprechenden Zeile der Spalte A aus.
WAS willst Du denn erreichen.

Kommentar von ettlinbay ,

Sub Zufallszahl()
Dim Wert1, wert02, wert03, wert04, wert05, wert06
Dim z1, z2, z3, z4, z5, z6
Randomize ' Zufallszahlengenerator initialisieren.
z1 = Int((49 * Rnd) + 1)
wert01 = Range("a" & z1).Value
Range("d3").Value = wert01
Randomize

End Sub

Kommentar von ettlinbay ,

Gedacht war, dass Excel erst nach 432 durchläufen eine Zufallszahl aus 49 Zahlen erzeugt.

Kommentar von Oubyi ,

Was denn für "Durchläufe"?
Es bringt ja nichts erst die 432te Zufallszahl zu nehmen, oder?
Die wird dadurch auch nicht besser.
Wenn ich das aber so wörtlich umsetzte wäre es:

Sub Zufallszahl()
Dim wert01, wert02, wert03, wert04, wert05, wert06
Dim z1, z2, z3, z4, z5, z6
Dim i As Integer
For i = 1 To 432
Randomize ' Zufallszahlengenerator initialisieren.
z1 = Int((49 * Rnd) + 1)
Randomize
Next i
wert01 = Range("a" & z1).Value
Range("D3").Value = wert01
End Sub

Jetzt mal ganz ohne den etwas "seltsamen" Code weiter zu bearbeiten (außer dass ich aus Dim Wert1 ein Dim wert01 gemacht habe, da es sonst gar nicht läuft).

Kommentar von ettlinbay ,

Erstmal vielen Dank.

Die Zahl die jetzt gezeigt wird , ist das die 432. Zahl bzw. Treffer?

Toll wäre, wenn jede Zahl angezeigt wird und erst beim 432. stehen bleibt.

Es ist etwas spielerei, aber trotzdem im Voraus vielen Dank für Ihre Bemühungen.

Kommentar von Ninombre ,

Da ich keinen wesentlichen eigenen Beitrag hab, häng ich mich hier mal rein:
Sub Zufallszahl()
Dim wert01, wert02, wert03, wert04, wert05, wert06
Dim z1, z2, z3, z4, z5, z6
Dim i As Integer
For i = 1 To 432
    Randomize ' Zufallszahlengenerator initialisieren.
    z1 = Int((49 * Rnd) + 1)
    Randomize
    Cells(i, 1).Value = z1
Next i
End Sub

Das läuft dann aber darauf hinaus, dass Du 432 Zufallszahlen aus dem Bereich 1- 49 erhältst. Das passt aber nicht wirklich zur ursprünglichen Frage - und da kommt Oubyis Hinweis ins Spiel: Wenn es um Zufallszahlen geht, ist doch egal, was bei den 431 Versuchen zuvor herausgekommen ist. Entscheidend ist die jetzt ermittelte Zahl. Das kann man auch direkter haben.

Kommentar von ettlinbay ,

Dankeschön!

Kommentar von Oubyi ,

Das soll also so aussehen, wie bei einem Geldspielautomaten?
Dann vielleicht so:

Sub Zufallszahl()
Dim wert01, wert02, wert03, wert04, wert05, wert06
Dim z1, z2, z3, z4, z5, z6
Dim i As Integer
Dim j As Long
For i = 1 To 432
Randomize ' Zufallszahlengenerator initialisieren.
z1 = Int((49 * Rnd) + 1)
wert01 = Range("a" & z1).Value
Range("D3").Value = wert01
For j = 1 To 1000000
Next j
Randomize
Next i
End Sub

Je nach Prozessor noch eine 0 hinzufügen oder löschen bei den 1000000.
Es gibt sicherlich noch elegantere Lösunten, aber ...

Kommentar von Oubyi ,

Um die unprofessionelle Zählschleife als "Bremser" zu vermeiden, kann man es auch so machen:

Sub Zufallszahl()
Dim wert01, wert02, wert03, wert04, wert05, wert06
Dim z1, z2, z3, z4, z5, z6
Dim i As Integer
Dim j As Long
For i = 1 To 432
Randomize ' Zufallszahlengenerator initialisieren.
z1 = Int((49 * Rnd) + 1)
wert01 = Range("a" & z1).Value
Range("D3").Value = wert01
Sleep (100)
Randomize
Next i
End Sub

Allerdings muss Du dafür vorher ein allgemeines Modul erstellen (Rechtsklick auf das VBA-Projekt im Projektexplorer --> Einfügen --> Modul) und dort als einzige Zeile diese schreiben:

Declare Sub Sleep Lib "Kernel32.dll" (ByVal Schlafzeit As Long)

Mit der Zahl hinter Sleep kannst Du dann angeben, wieviele Milisekunden das Makro warten soll, also im Beispiel 100 ms = 1/10 sek.

Kommentar von ettlinbay ,

Vielen Dank! Ihr seid super!

Kommentar von ettlinbay ,

Hallo, hätte noch mal eine Frage.

Und zwar wäre es möglich, das Excel eine "gezogene" nicht wiederholt bzw. erst wieder nach einem bestimmten Durchlauf wieder "zieht". 

Z.b. die Zahl 6 wird gezogen und erst beim siebten Durchlauf darf die Zahl 6 wieder gezogen werden?

Geht sowas? Danke im Voraus :) .

Kommentar von Oubyi ,

Sorry, aber das ist dann um einiges aufwendiger und das ist mir im Moment einfach zu viel.
Stelle dazu hier vielleicht einfach nochmal eine neue Frage, sodass auch die anderen Experten darauf aufmerksam werden.
Beziehe Dich dabei auf diesen Thread und poste auf jeden Fall Deinen aktuellen Code.
Fall Du hier keine Hilfe erhältst, versuch es vlt. mal bei den Experten von Herber:

http://www.herber.de/forum/

Da findest Du Excel-Freaks konzentriert.

Kommentar von ettlinbay ,

Eilt nicht, falls mal Zeit haben solltest wäre ich dankbar.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten