Excel VBA – Lottoschein mit Zufallszahlen ausfüllen

Eindeutige Zufallszahlen generieren

Bei einem Jackpot über 10 Millionen könnte man auf die Idee kommen Lotto zu spielen. In diesem Artikel zeige ich, wie man mit VBA einen Lottoschein per Zufallsgenerator ausfüllen kann. Das hat den Vorteil, dass Sie sich den Gewinn nicht mit Leuten teilen müssen, die auf das gleiche Geburtsdatum  (wird gern für Lottozahlen verwendet) getippt haben :)

111 VBA Makros die Ihr Leben leichter machen. Egal ob Sie Einsteiger oder fortgeschrittener Anwender sind – in diesem Buch finden Sie Lösungen für Ihre alltäglichen Aufgaben. Keine Vorkenntnisse notwendig.

In einem Lottoschein können von 49 möglichen Zahlen sechs angekreuzt werden. Mittels eines Zufallsgenerators müssen wir aus Zahlen 1 bis 49 sechs Werte auslesen. Dabei muss jeder der sechs Werte eindeutig sein. Um dies zu bewerkstelligen greifen wir zu einem Trick. Es werden zwei Arrays (Datenstrukturen) angelegt.

Das erste Array lngArray1 wird 49 Datenfelder enthalten. Das zweite Array lngArray1 enthält 6 Datenfelder. Wir legen also wie gewohnt ein Makro an. Und dimensionieren die beiden Arrays entsprechend. Darüber hinaus deklarieren wir zwei Variablen für spätere Werte.


Sub FillLotto()
Dim lngArray1(1 To 49) As Long
Dim lngArray2(1 To 6) As Long
Dim lngC, lngX As Long

End Sub

Danach füllen wir das erste Datenfeld mit 49 Werten. Dazu wird eine For Next Schleife verwendet.


'Das Array wird mit 49 Zahlen gefüllt
For lngC = 1 To 49
    lngArray1(lngC) = lngC
Next

Der Inhalt des Datenfeld sieht danach so aus:
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49]
Das sind die Zahlen die wir ziehen wollen.

Nun werden in der zweiten Schleife die sechs Zufallszahlen ermittelt und an das zweite Datenfeld lngArray2 übegeben. Zunächst wird in einer Do Loop Anweisung über die Rnd-Funktion ein Zufallswert im Bereich von 1 bis 49 ermittelt. Wenn an der Stelle der gezogenen Zahl eine Null steht, wird die Ziehung (Zufallsgenerierung) wiederholt.

Die Rnd-Funktion an sich gibt einen Wert mit Nachkommastellen zurück, der kleiner als 1, aber größer oder gleich 0 ist. Mit der Funktion Int bekommen wir eine Ganzzahl.


lngX = Int(Rnd * 49) + 1

Anschließend speichern wir die Zahl im zweiten Array. Da wir jede Zahl nur ein Mal ziehen wollen, ersetzen wir die gezogene Zahl im ersten Array mit einer Null. So stellen wir sicher, das jede Zahl nur ein Mal ausgelesen werden kann.
Der Code für diesen Teil sieht wie folgt aus:


'Sechs Zufallszahlen aus dem Array gezogen
For lngC = 1 To 6
'Ziehe, bis ein Wert > 0 geliefert wird
Do
lngX = Int(Rnd * 49) + 1
Loop Until lngArray1(lngX) > 0

'Zahl speichern
lngArray2(lngC) = lngX

'gezogene Zahl im ersten Array mit 0 ersetzen
lngArray1(lngX) = 0
Next

Anschließend wird der Inhalt der beiden Datenfelder über Debug.Print im Direktfenster des VBA-Editors ausgegeben.


'Den Inhalt des Arrays1 ausgeben
For lngC = 1 To 49
    Debug.Print lngArray1(lngC),
Next

'Neue Zeile im Direktfenster
Debug.Print

'Den Inhalt des Arrays2 ausgeben
For lngC = 1 To 6
    Debug.Print lngArray2(lngC),
Next

Unternehmensplanung mit SAP BPC

111 VBA Makros die Ihr Leben leichter machen

Wollen Sie Ihre langweiligen Routineaufgaben loswerden? Möchten Sie Excel an Ihre Bedürfnisse anpassen, Berechnungen automatisieren, eigene Dialogfelder erstellen und vieles mehr? Dieses Buch zeigt Ihnen, wie Sie Ihre Aufgaben schnell und einfach mit VBA erledigen.

Der Inhalt der beiden Datenfelder könnte nach dem Ausführen des Makros so aussehen:
Array1: [1,2,3,4,5,6,7,8,9,10,11,12,13,0,0,16,17,18,0,0,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,0,48,0]

Array2: [15,19,47,49,20,14]
Beachten Sie die Stellen mit 0 im ersten Datenfeld. Diese entsprechen den Zahlen, die dem zweiten Datenfeld übergeben wurden.

Das gesamte Makro sieht wie folgt aus:


Sub FillLotto()
Dim lngArray1(1 To 49) As Long
Dim lngArray2(1 To 6) As Long
Dim lngC, lngX As Long
'Das Array wird mit 49 Zahlen gefüllt
For lngC = 1 To 49
    lngArray1(lngC) = lngC
Next

'Sechs Zufallszahlen aus dem Array gezogen
For lngC = 1 To 6
'Ziehe, bis ein Wert > 0 geliefert wird
Do
lngX = Int(Rnd * 49) + 1
Loop Until lngArray1(lngX) > 0

'Zahl speichern
lngArray2(lngC) = lngX

'gezogene Zahl im ersten Array mit 0 ersetzen
lngArray1(lngX) = 0
Next

'Den Inhalt des Arrays1 ausgeben
For lngC = 1 To 49
    Debug.Print lngArray1(lngC),
Next

'Den Inhalt des Arrays2 ausgeben
For lngC = 1 To 6
    Debug.Print lngArray2(lngC),
Next

End Sub

Ich hoffe, dass ich anschaulich darstellen konnte, wie Zufallszahlen eindeutig generiert werden können. Bevor Sie sich jedoch einen Lottoschein kaufen, sollten Sie sich über die Gewinnwahrscheinlichkeit informieren. ;)
Hast du Fragen oder Anregungen? Dann kommentiere bitte diesen Beitrag.
Dieser Beitrag ist ein Teil der VBA Grundlagen Serie.

Die Beispiel Excel Datei mit dem sofort einsetzbaren Makro und 111+ andere Makros, die Ihr Leben leichter machen, finden Sie hier.

Beeindrucke deinen Chef mit coolen Excel Tricks!

  • Lasse dich von deinen Kollegen nicht abhängen!
  • Spare Zeit und nutze diese für angenehmere Dinge
  • Steigere deine Produktivität und Effizienz
  • Es ist leicht - In meinem Newsletter gebe ich Schritt für Schritt Anleitungen die jeder versteht
  • Bei der Anmeldung zu meinem Newsletter erhälst du das Buch „Excel Tricks die deinen Chef beeindrucken“ als Willkommensgeschenk.
20 Excel Tricks

Jetzt anfordern!

* Pflichtfeld
 
Kein SPAM. 100% sicher.

Quellen und weiterführende Literatur:
Bernd Held – VBA mit Excel: Das umfassende Handbuch
Microsoft MSDN – Rnd-Funktion (Visual Basic)
Falls Ihnen dieser Beitrag weitergeholfen hat, wäre es eine sehr nette Anerkennung meiner Arbeit wenn Sie z.B. Ihre Bücher über Amazon bestellen würden. Wenn Sie ein Produkt kaufen, erhalte ich dafür eine Provision. Für Sie ändert sich am Preis des Produktes gar nichts. Ich möchte mich an dieser Stelle jetzt schon für Ihre Unterstützung bedanken.

1 Kommentar

Trackbacks & Pingbacks

  1. […] Beispiele Lottoschein mit Zufallszahlen ausfüllen Wochentag des Geburtstages ermitteln Jede Zeile in eine bestimmte Tabelle kopieren Wie Sie Ihre […]

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.