Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA-Generator für Lottozahlen

VBA-Generator für Lottozahlen
Vera
Hallo Excelfreunde,
wer hat eine möglichst effektive Idee (VBA-Idee) die Variable Lotto(6) mit sechs zufällig (aber unterschiedlichen) Lottozahlen zu füllen?
Habe wohl zu viel Rindfleisch gegessen: mir fällt nichts schnelles ein.
Liebe Grüße Vera
Anzeige
meine bisherige umständliche Lösung
Vera

Sub LottoZufall()
Dim Lottozahl(6), Schleife, Zahl As Byte
Schleife = 1
Do
Zahl = Int((49) * Rnd + 1)
If Zahl <> Lottozahl(1) And _
Zahl <> Lottozahl(2) And _
Zahl <> Lottozahl(3) And _
Zahl <> Lottozahl(4) And _
Zahl <> Lottozahl(5) And _
Zahl <> Lottozahl(6) Then
Lottozahl(Schleife) = Zahl
Schleife = Schleife + 1
End If
Loop Until Schleife > 6
End Sub

Anzeige
AW: meine bisherige umständliche Lösung
30.04.2004 14:59:40
Oberschlumpf
Hi Vera
Sieht doch gut aus.
Du ermittelst 6 zufällig ausgewählte Zahlen, und mit der etwas längeren If-Bedingung :-)sorgst Du dafür, dass keine Zahl doppelt ausgewählt wird.
Da aber mein Wort nicht das Maß aller Dinge ist, gibts ja vielleicht doch noch Verbesserungsmöglichkeiten, die aber auch ich im Moment nicht erkenne :-)
Ciao, viel Spaß beim Lotto spielen & viel Glück beim Gewinnen ;-)
Thorsten
Anzeige
AW: meine bisherige umständliche Lösung
K.Rola
Hallo,
sollen die Zahlen gleich in einem Blatt ausgegeben werden oder einfach nur
als Array?
Gruß K.Rola
AW: kleiner Schönheitsfehler
OliveR
Hi Vera,
leider wird eine Zahl, wenn diese doppelt gezogen wird nicht erneut gezogen, d.h. das Feld im Array bleib für diese Ziehung leer..
Gruß
OliveR

Sub LottoZufall()
Dim Lottozahl(6), Schleife, Zahl As Byte
Schleife = 1
For Schleife = 1 To 6
Zahl = Int((49) * Rnd + 1)
If Zahl <> Lottozahl(1) And _
Zahl <> Lottozahl(2) And _
Zahl <> Lottozahl(3) And _
Zahl <> Lottozahl(4) And _
Zahl <> Lottozahl(5) And _
Zahl <> Lottozahl(6) Then
Lottozahl(Schleife) = Zahl
Else
Schleife = Schleife - 1
End If
Next
End Sub

Anzeige
AW: VBA-Generator für Lottozahlen
FP
Hallo Vera,
probier's mal damit:

Sub Lotto()
Dim Zahlen(6) As Byte
Dim Zahl      As Byte
Dim ZNr       As Byte
Dim i         As Byte
Zahlen(1) = Fix(Rnd * 49) + 1
For ZNr = 2 To 6
Zahl = Fix(Rnd * 49) + 1
For i = 1 To ZNr - 1
If Zahl = Zahlen(i) Then
Zahlen(ZNr) = 1
Exit For
End If
Next
Zahlen(ZNr) = Zahlen(ZNr) + Zahl
Next
End Sub

Servus aus dem Salzkammergut
Franz
Anzeige
AW: VBA-Generator für Lottozahlen
Micha
Hallo Franz,
m.E. ist dein Code für das Lottozahlenproblem nicht geeignet.
Beispiel: Sei Zahlen(1)=37, wenn jetzt als zweite Zahl wieder die 37 gezogen wird, dann wird in deiner Wenn-Abfrage Zahlen(2)=1 gesetzt und die innere Schleife wird verlassen. Anschließend wird Zahlen(2)=38 (37+1). Damit schließt du zwar doppelte Zahlen aus, aber gleichzeitig wird das Spiel unfair. Denn in diesem Beispiel ist die Wahrscheinlichkeit, dass die zweite Ziffer eine 38 wird, doppelt so hoch als, dass sie beispielsweise eine 36 wird.
Ein weiteres Problem ergibt sich, wenn die 49 doppelt gezogen wird. Dann wird aus der zweiten 49 auf einmal eine 50.
Oder habe ich deinen Code falsch verstanden?
Um auch mal produktiv zu sein, hier mal ein etwas anderer Ansatz, der meiner Meinung nach funktionieren sollte:

Sub lottozahlen()
Dim kugeln() As Byte
Dim lotto(5) As Byte
ReDim kugeln(48)
For i = 0 To 48
kugeln(i) = i + 1
Next i
For i = 0 To 5
zufall = Int((49 - i) * Rnd + 1)
lotto(i) = kugeln(zufall)
For j = zufall To 48 - 1 - i
kugeln(j) = kugeln(j + 1)
Next j
ReDim Preserve kugeln(47 - i)
Next i
End Sub

Viele Grüße und ein schönes Wochenende
Micha
Anzeige
AW: VBA-Generator für Lottozahlen
Beate
Hallo Vera,
schau mal auf der Seite von Thomas Igel an: http://www.igelnet.de/
Da gibt es eíne Freeware-Datei Lotto.zip, eine kleine Anwendung, die einem die schwere Entscheidung abnimmt, welche Zahlen man ankreuzen soll. Für das Spiel 6 aus 49 werden 6 Zahlen gezogen.
Der Code ist wie dort wie folgt:

Sub Lotto()
Application.ScreenUpdating = False
Dim Lottozahl(6)
Range("A3:G9").Select
With Selection
.Borders(xlLeft).LineStyle = xlNone
.Borders(xlRight).LineStyle = xlNone
.Borders(xlTop).LineStyle = xlNone
.Borders(xlBottom).LineStyle = xlNone
.BorderAround LineStyle:=xlNone
.Interior.ColorIndex = xlNone
End With
Range("A1").Select
For zähler% = 1 To 6
Randomize Timer
nochmal:
Lottozahl(zähler%) = Int((49) * Rnd + 1)
Cells.Find(What:=Lottozahl(zähler%)).Activate
Selection.BorderAround Weight:=xlThin, ColorIndex:=xlAutomatic
If Selection.Interior.ColorIndex = 35 Then GoTo nochmal
With Selection.Interior
.ColorIndex = 35
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
Next zähler%
End Sub

Gruß,
Beate
Anzeige
anderer ansatz
IngoG
Hallo Zusammen,
mein ansatz lautet folgendermaßen:

Sub Lotto()
Dim I As Byte
For I = 0 To 48
[iv65536].Offset(-I, 0) = Rnd
Next I
For I = 0 To 5
Cells(I + 1, [iv6].End(xlToLeft).Column + 1) = Application.WorksheetFunction.Rank([iv65536].Offset(-I, 0), [iv65488:iv65536])
Next I
[iv65488:iv65536].ClearContents
End Sub

hier werden 49 zufallszahlen gezogen und anschließend geschaut, die wievielt größte die zufallszahl 1-6 ist.
bei einer genauigkeit von 15 stellen sollte es unproblematisch sein, dass evt zweimal die selbe zufallszahl unter den 1. sechs zahlen vorkommt...
Gruß Ingo
PS eine Rückmeldung wäre nett...
Anzeige
AW: VBA-Generator für Lottozahlen
FP
Hallo Micha,
1) mein Code hätte leider tatsächlich eine Zahl 50 gezogen :-(
2) hier eine Alternative

Sub Lotto()
Dim Zahlen(6) As Byte
Dim blnZ(49)  As Boolean
Dim Zahl      As Byte
Dim ZNr       As Byte
Do
Zahl = Fix(Rnd * 49) + 1
If blnZ(Zahl) = False Then
blnZ(Zahl) = True
ZNr = ZNr + 1
Zahlen(ZNr) = Zahl
End If
Loop Until ZNr = 6
End Sub

Servus aus dem Salzkammergut
Franz
Anzeige
AW: VBA-Generator für Lottozahlen
Micha
Hallo Franz,
dein neuer Vorschlag gefällt mir persönlich sehr gut :-)
gruß
micha
Genial FP!!!!!!!!!!!!!
Dieter
d
;
Anzeige
Anzeige

Infobox / Tutorial

Lottozahlen generieren mit Excel VBA


Schritt-für-Schritt-Anleitung

Um einen Excel Lottozahlen Generator mit VBA zu erstellen, folge diesen Schritten:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Klicke auf "Einfügen" und dann auf "Modul", um ein neues Modul zu erstellen.

  3. Kopiere und füge den folgenden Code in das Modul ein:

    Sub LottoZufall()
       Dim Lottozahl(6) As Byte
       Dim Schleife As Byte
       Dim Zahl As Byte
    
       Schleife = 1
       Do
           Zahl = Int((49) * Rnd + 1)
           If Not (Zahl = Lottozahl(1) Or Zahl = Lottozahl(2) Or _
                   Zahl = Lottozahl(3) Or Zahl = Lottozahl(4) Or _
                   Zahl = Lottozahl(5) Or Zahl = Lottozahl(6)) Then
               Lottozahl(Schleife) = Zahl
               Schleife = Schleife + 1
           End If
       Loop Until Schleife > 6
    
       ' Ausgabe der Lottozahlen
       For i = 1 To 6
           Cells(1, i).Value = Lottozahl(i) ' Ausgabe in Zeile 1
       Next i
    End Sub
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Führe das Makro aus, indem du ALT + F8 drückst und das Makro "LottoZufall" auswählst.

Die generierten Lottozahlen werden in die ersten sechs Zellen der ersten Zeile ausgegeben.


Häufige Fehler und Lösungen

Fehler 1: Doppelte Zahlen werden nicht ausgeschlossen

  • Lösung: Stelle sicher, dass die Überprüfung auf bereits gezogene Zahlen korrekt implementiert ist. Verwende die If Not-Bedingung wie im obigen Beispiel.

Fehler 2: Fehlermeldung beim Ausführen des Makros

  • Lösung: Prüfe, ob dein Excel die Ausführung von Makros erlaubt. Gehe zu "Datei" > "Optionen" > "Sicherheitscenter" und aktiviere die Makros.

Alternative Methoden

Es gibt mehrere Ansätze, um Lottozahlen mit Excel zu generieren:

  1. Mit einer Excel-Formel: Du kannst die Funktion =ZUFALLSBEREICH(1;49) verwenden, um zufällige Zahlen zu erhalten, jedoch musst du sicherstellen, dass keine doppelten Werte auftreten.

  2. VBA-Alternativen: Es gibt viele Ansätze, wie den von Micha, der ein Array verwendet, um die Zufallszahlen effizient zu generieren. Hier ein Beispiel:

    Sub lottozahlen()
       Dim kugeln() As Byte
       Dim lotto(5) As Byte
       Dim zufall As Integer
       ReDim kugeln(48)
       For i = 0 To 48
           kugeln(i) = i + 1
       Next i
       For i = 0 To 5
           zufall = Int((49 - i) * Rnd + 1)
           lotto(i) = kugeln(zufall)
           For j = zufall To 48 - 1 - i
               kugeln(j) = kugeln(j + 1)
           Next j
           ReDim Preserve kugeln(47 - i)
       Next i
    End Sub

Praktische Beispiele

Hier sind zwei praktische Beispiele für einen Lottozahlen Generator:

  1. Einfacher Lottozahlen Generator:

    • Nutze den ersten VBA-Code, um 6 zufällige Lottozahlen zwischen 1 und 49 zu generieren und in Excel auszugeben.
  2. Erweiterter Lottozahlen Generator:

    • Verwende den Ansatz von FP, bei dem ein Array zur Vermeidung von doppelten Zahlen verwendet wird:
    Sub Lotto()
       Dim Zahlen(6) As Byte
       Dim blnZ(49) As Boolean
       Dim Zahl As Byte
       Dim ZNr As Byte
       Do
           Zahl = Fix(Rnd * 49) + 1
           If blnZ(Zahl) = False Then
               blnZ(Zahl) = True
               ZNr = ZNr + 1
               Zahlen(ZNr) = Zahl
           End If
       Loop Until ZNr = 6
    End Sub

Tipps für Profis

  • Nutze Application.ScreenUpdating = False, um die Ausführungsgeschwindigkeit zu erhöhen, wenn du große Datenmengen bearbeitest.
  • Implementiere eine Wahrscheinlichkeitsrechnung für die Excel Lottozahlen, um die Gewinnchancen zu analysieren.
  • Experimentiere mit dem Excel Lottozahlen Generator, indem du verschiedene Varianten und Strategien testest.

FAQ: Häufige Fragen

1. Wie kann ich die Wahrscheinlichkeit von Lottozahlen auswerten? Du kannst die Wahrscheinlichkeit von Lottozahlen mit Excel-Formeln und Datenanalysen auswerten. Nutze Funktionen wie HÄUFIGKEIT und Diagramme zur visuellen Darstellung.

2. Gibt es kostenlose Downloads für Lottozahlen Generatoren? Ja, auf Seiten wie die lottozahlen.net oder spezielle Foren findest du oft kostenlose Downloads für Lottozahlen Generatoren. Achte darauf, die Quelle zu überprüfen, um sicherzustellen, dass es sich um vertrauenswürdige Software handelt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige