Excel VBA – Lottoschein mit Zufallszahlen ausfüllen
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 :)
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
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.

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.
Trackbacks & Pingbacks
[…] 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!