Supportnet / Forum / Tabellenkalkulation
In Zufallsbereich Zahlen ausschliessen
Frage
Hallo Leutz
habe ein kleines, wahrscheinlich ziemlich simples problem... Ich möchte in einer Simulation zum schweizer Zahlenlotto 6 selbständig einzugebende Zahlen in der einen, 6 zufällige Zahlen in der anderen Zeile. Allerdings darf jede der 6 zahlen in jeder Zeile nur einmal vorkommen.
Die Zufallszahlen habe ich mit =Zufallsbereich(1;40) eingegeben, aber eben... dem ist es egal, wie häufig eine Zahl in der Zeile vorkommt... kann mir da wer helfen?
Antwort 1 von LittleT
Hallo Kjatar
Ich hab das bei mir so gemacht, dass ich die 6 Zufallszahlen gezogen habe und diese in einem Array abgespeichert.
Anschliessend habe ich das Array sortiert und Wert 1 mit Wert 2 verglichen, Wert 2 mit Wert 3 usw.
Kam es zu einer übereinstimmung habe ich diesen Wert neu gelöscht und nochmal neu "gezogen", und die überprüfung wieder durchgeführt. Das so lange bis 6 unterschiedliche Zahlen im Array waren.
Falls diese Methode auch umständlich ist freue ich mich schon über weiter lösungsvorschläge.
Gruß
LittleT
Ich hab das bei mir so gemacht, dass ich die 6 Zufallszahlen gezogen habe und diese in einem Array abgespeichert.
Anschliessend habe ich das Array sortiert und Wert 1 mit Wert 2 verglichen, Wert 2 mit Wert 3 usw.
Kam es zu einer übereinstimmung habe ich diesen Wert neu gelöscht und nochmal neu "gezogen", und die überprüfung wieder durchgeführt. Das so lange bis 6 unterschiedliche Zahlen im Array waren.
Falls diese Methode auch umständlich ist freue ich mich schon über weiter lösungsvorschläge.
Gruß
LittleT
Antwort 2 von Kjatar
Danke für die Schnelle antwort, aber...
Hab zwar die Lösungsidee verstanden, hab jedoch n kleines Problem... bin noch recht neu in Excel und hab jetzt gerade keine Ahnung wie ich das mit den arrays machen soll...
Hab zwar die Lösungsidee verstanden, hab jedoch n kleines Problem... bin noch recht neu in Excel und hab jetzt gerade keine Ahnung wie ich das mit den arrays machen soll...
Antwort 3 von CaroS
Hallo Kjatar,
wenn es in diesem Zahlenlotto anfangs 40 mögliche Zahlen gibt, dann ermittle zuerst eine Zahl aus dem Bereich 1 bis 40, dann eine aus dem Bereich 1 bis 39, dann aus 1 bis 38 usw. und schließlich die die sechste Zahl aus dem Bereich 1 bis 35.
Diese 6 Zahlen sind jetzt aber noch nicht Deine 6 Lottozahlen, sondern nur die Indizes des Arrays der verbliebenen Zahlen.
Beispiel: Wenn zuerst eine 3 ermittelt wird und anfangs natürlich alle 40 Lottozahlen zur Verfügung stehen, dann ist damit auch die Lottozahl 3 gezogen worden. Die Ausgangssituation vor der "zweiten Ziehung" ist nun folgende Zuordnung:
Hilfszahlen 1 bis 39 ---> Lottozahlen 1, 2, 4, 5, 6, ... , 40
1 ---> 1
2 ---> 2
3 ---> 4
4 ---> 5
5 ---> 6
... ---> ...
39 ---> 40
Aus den per ZUFALLSZAHL() ermittelten Zahlen links werden dann die tatsächlich gezogenen Lottozahlen rechts abgeleitet.
Da ich die Realisierung in Excel nicht sofort fertig habe, wollte ich erstmal das Prinzip beschreiben. Falls Du an einer Formel- oder VBA-Lösung interessiert bist, bitte nachfragen.
Gruß,
CaroS
wenn es in diesem Zahlenlotto anfangs 40 mögliche Zahlen gibt, dann ermittle zuerst eine Zahl aus dem Bereich 1 bis 40, dann eine aus dem Bereich 1 bis 39, dann aus 1 bis 38 usw. und schließlich die die sechste Zahl aus dem Bereich 1 bis 35.
Diese 6 Zahlen sind jetzt aber noch nicht Deine 6 Lottozahlen, sondern nur die Indizes des Arrays der verbliebenen Zahlen.
Beispiel: Wenn zuerst eine 3 ermittelt wird und anfangs natürlich alle 40 Lottozahlen zur Verfügung stehen, dann ist damit auch die Lottozahl 3 gezogen worden. Die Ausgangssituation vor der "zweiten Ziehung" ist nun folgende Zuordnung:
Hilfszahlen 1 bis 39 ---> Lottozahlen 1, 2, 4, 5, 6, ... , 40
1 ---> 1
2 ---> 2
3 ---> 4
4 ---> 5
5 ---> 6
... ---> ...
39 ---> 40
Aus den per ZUFALLSZAHL() ermittelten Zahlen links werden dann die tatsächlich gezogenen Lottozahlen rechts abgeleitet.
Da ich die Realisierung in Excel nicht sofort fertig habe, wollte ich erstmal das Prinzip beschreiben. Falls Du an einer Formel- oder VBA-Lösung interessiert bist, bitte nachfragen.
Gruß,
CaroS
Antwort 4 von Kjatar
jep, wäre nett von dir, ich kriegs selbst glaube ich nicht auf die reihe... bin jetzt gerade an einer anderen lösung dran, aber wär auch net schlecht wenn ich mehrere zur auswahl habe...
danke für antwort
grz
Kjatar
danke für antwort
grz
Kjatar
Antwort 5 von CaroS
Hallo Kjatar,
man könnte das mit Formeln einfach so machen:
A1: Überschrift: Hilfszahlen
B1: Überschrift: Lottozahlen 6 aus 40
A2: =GANZZAHL(ZUFALLSZAHL() * 40) + 1
A3: =GANZZAHL(ZUFALLSZAHL() * 39) + 1
A4: =GANZZAHL(ZUFALLSZAHL() * 38) + 1
A5: =GANZZAHL(ZUFALLSZAHL() * 37) + 1
A6: =GANZZAHL(ZUFALLSZAHL() * 36) + 1
A7: =GANZZAHL(ZUFALLSZAHL() * 35) + 1
B2: =A2
B3: =A3 + SUMMENPRODUKT((A$2:A2 <= A3) * 1)
B4: =A4 + SUMMENPRODUKT((A$2:A3 <= A4) * 1)
B5: =A5 + SUMMENPRODUKT((A$2:A4 <= A5) * 1)
B6: =A6 + SUMMENPRODUKT((A$2:A5 <= A6) * 1)
B7: =A7 + SUMMENPRODUKT((A$2:A6 <= A7) * 1)
Spalte A eventuell ausblenden.
Gruß,
CaroS
man könnte das mit Formeln einfach so machen:
A1: Überschrift: Hilfszahlen
B1: Überschrift: Lottozahlen 6 aus 40
A2: =GANZZAHL(ZUFALLSZAHL() * 40) + 1
A3: =GANZZAHL(ZUFALLSZAHL() * 39) + 1
A4: =GANZZAHL(ZUFALLSZAHL() * 38) + 1
A5: =GANZZAHL(ZUFALLSZAHL() * 37) + 1
A6: =GANZZAHL(ZUFALLSZAHL() * 36) + 1
A7: =GANZZAHL(ZUFALLSZAHL() * 35) + 1
B2: =A2
B3: =A3 + SUMMENPRODUKT((A$2:A2 <= A3) * 1)
B4: =A4 + SUMMENPRODUKT((A$2:A3 <= A4) * 1)
B5: =A5 + SUMMENPRODUKT((A$2:A4 <= A5) * 1)
B6: =A6 + SUMMENPRODUKT((A$2:A5 <= A6) * 1)
B7: =A7 + SUMMENPRODUKT((A$2:A6 <= A7) * 1)
Spalte A eventuell ausblenden.
Gruß,
CaroS
Antwort 6 von Kjatar
Danke für antwort, interessante lösung... ich werd sie gleich mal ausprobieren...
grz
Kjatar
grz
Kjatar
Antwort 7 von Kjatar
hmm da fällt mir gleich noch was ein... wie kann man verhindern, dass in einer Zelle, die der User ausfüllt auch keine 2 zahlen gleichzeitig reinkommen können...?
Antwort 8 von CaroS
Hallo Kjatar,
ich würde sagen, im Moment reden wir aneinander vorbei. Ich hatte eine Möglichkeit beschrieben, wie man mit Formeln 6 Lottozahlen aus 40 ohne Wiederholungen ermitteln kann und dafür den Inhalt von 14 Zellen (A1:B7) angegeben. Da hat kein User etwas einzugeben. Er kann, so oft er will, auf F9 drücken und jeweils 6 neue Lottozahlen ziehen lassen, aber sonst erstmal gar nichts.
Nun beschreibst Du eine Situation, die ich nicht kenne, nämlich dass ein User etwas "ausfüllt", möglicherweise sogar 2 Zahlen in einer Zelle.
Was soll ich Dir darauf antworten?
Hat das eine mit dem anderen irgendetwas zu tun?
Gruß,
CaroS
ich würde sagen, im Moment reden wir aneinander vorbei. Ich hatte eine Möglichkeit beschrieben, wie man mit Formeln 6 Lottozahlen aus 40 ohne Wiederholungen ermitteln kann und dafür den Inhalt von 14 Zellen (A1:B7) angegeben. Da hat kein User etwas einzugeben. Er kann, so oft er will, auf F9 drücken und jeweils 6 neue Lottozahlen ziehen lassen, aber sonst erstmal gar nichts.
Nun beschreibst Du eine Situation, die ich nicht kenne, nämlich dass ein User etwas "ausfüllt", möglicherweise sogar 2 Zahlen in einer Zelle.
Was soll ich Dir darauf antworten?
Hat das eine mit dem anderen irgendetwas zu tun?
Gruß,
CaroS
Antwort 9 von Kjatar
Da hast du mich glaub ich ein wenig falsch verstanden, die erste lösung war volkommen korrekt, funktioniert auch, jetzt hab ich aber noch ein zweites problem... eben das, dass der jede zahl nur einmal eingeben kann
ich brauche daher sowohl für problem 1 eine lösung (die du mir gegeben hast), sowie für problem 2
grz
Kjatar
ich brauche daher sowohl für problem 1 eine lösung (die du mir gegeben hast), sowie für problem 2
grz
Kjatar
Antwort 10 von CaroS
Also, Du hast ein großes Tabellenblatt mit lauter leeren Zellen, das mit den Lottozahlen überhaupt nichts zu tun hat und Du willst nicht, dass ...
- ein User 2 verschiedene Zahlen in ein- und dieselbe Zelle schreibt?
- ein User ein- und dieselbe Zahl in 2 verschiedene Zellen schreibt?
Kannst Du bitte mal mit einem Beispiel erklären, was Du willst oder nicht willst. Was konkret und wie macht es denn Dein User , wenn er etwas falsch macht. Unter der Beschreibung kann man sich alles mögliche vorstellen.
Vermutlich würde Dir eine Gültigkeitsprüfung (Menü Daten -- Gültigkeit... ) helfen.
Gruß,
CaroS
- ein User 2 verschiedene Zahlen in ein- und dieselbe Zelle schreibt?
- ein User ein- und dieselbe Zahl in 2 verschiedene Zellen schreibt?
Kannst Du bitte mal mit einem Beispiel erklären, was Du willst oder nicht willst. Was konkret und wie macht es denn Dein User , wenn er etwas falsch macht. Unter der Beschreibung kann man sich alles mögliche vorstellen.
Vermutlich würde Dir eine Gültigkeitsprüfung (Menü Daten -- Gültigkeit... ) helfen.
Gruß,
CaroS
Antwort 11 von Kjatar
Es geht immer noch ums Lottospiel, ich habe als die Zeile Tipp mit 6 spalten. Richtig darf man ja jede Zahl nur einmal als Tipp angeben, daher z.B.
Tipp 2 7 16 24 32 39
Der User darf also nicht 2 gleiche Zahlen in diese Zeile eingeben, z.B.
Tipp 3 9 18 18 29 36
Meine Frage ist, wie ich das verbieten kann, daher eine art Gültigkeitsprüfung der Zahlen... Mit Daten->Gültigkeit geht das nicht, ich kann (für mich als einzige Funktion dort wichtig) nur die kleinste und grösste mögliche Zahl angeben.
Tipp 2 7 16 24 32 39
Der User darf also nicht 2 gleiche Zahlen in diese Zeile eingeben, z.B.
Tipp 3 9 18 18 29 36
Meine Frage ist, wie ich das verbieten kann, daher eine art Gültigkeitsprüfung der Zahlen... Mit Daten->Gültigkeit geht das nicht, ich kann (für mich als einzige Funktion dort wichtig) nur die kleinste und grösste mögliche Zahl angeben.
Antwort 12 von nighty
hi all :)
hier erstmal ein makro um zahlen zu ziehen,ohne doppelte
gruss nighty
Option Explicit
Sub makro01()
Randomize Timer
ReDim lottozahl(49)
Dim zahl(7), endeindex, allezahlen, ziehung
Dim gezogen
endeindex = 49
For allezahlen = 1 To 49
lottozahl(allezahlen) = allezahlen
Next allezahlen
For ziehung = 1 To 7
gezogen = Int(Rnd * endeindex) + 1
zahl(ziehung) = lottozahl(gezogen)
lottozahl(gezogen) = lottozahl(endeindex)
endeindex = endeindex - 1
ReDim Preserve lottozahl(endeindex)
Range("A" & ziehung) = zahl(ziehung)
Next ziehung
End Sub
hier erstmal ein makro um zahlen zu ziehen,ohne doppelte
gruss nighty
Option Explicit
Sub makro01()
Randomize Timer
ReDim lottozahl(49)
Dim zahl(7), endeindex, allezahlen, ziehung
Dim gezogen
endeindex = 49
For allezahlen = 1 To 49
lottozahl(allezahlen) = allezahlen
Next allezahlen
For ziehung = 1 To 7
gezogen = Int(Rnd * endeindex) + 1
zahl(ziehung) = lottozahl(gezogen)
lottozahl(gezogen) = lottozahl(endeindex)
endeindex = endeindex - 1
ReDim Preserve lottozahl(endeindex)
Range("A" & ziehung) = zahl(ziehung)
Next ziehung
End Sub
Antwort 13 von CaroS
Hallo Kjatar,
das Ziehen von Lottozahlen und das Tippen von Lottozahlen sind zwei ziemlich verschiedene Dinge, die gewöhnlich räumlich und zeitlich voneinander getrennt stattfinden (sollten). Dass Du beides in Excel tun willst und worauf sich Deine Fragen beziehen kann ich nicht so ohne weiteres erraten. Es wäre schön, wenn Du das nächste Mal etwas deutlicher erklären könntest, worum es geht, das spart eine ganze Menge Unverständnis und Nachfragen. Ein paar einfache, klare Stichworte wie "Tipp eingegeben" o. ä. hätten genügt. Ich kann Dir auf die Entfernung nämlich Deine Wünsche nicht von den Augen ablesen.
Du kannst eine Gültigkeitsprüfung verwenden. Wenn z. B. A11:A16 der Bereich ist, in den die 6 Zahlen für einen Tipp eingegeben werden sollen, dann A11 markieren -- Daten -- Gültigkeit -- Einstellungen -- Zulassen: Benutzerdefiniert -- Formel:
=WENN(ZÄHLENWENN(A$11:A$16; A11) > 1; ""; A11)
-- Eingabemeldung und/oder Fehlermeldung angeben! -- OK.
A11:A16 markieren, Strg + U.
Gruß,
CaroS
das Ziehen von Lottozahlen und das Tippen von Lottozahlen sind zwei ziemlich verschiedene Dinge, die gewöhnlich räumlich und zeitlich voneinander getrennt stattfinden (sollten). Dass Du beides in Excel tun willst und worauf sich Deine Fragen beziehen kann ich nicht so ohne weiteres erraten. Es wäre schön, wenn Du das nächste Mal etwas deutlicher erklären könntest, worum es geht, das spart eine ganze Menge Unverständnis und Nachfragen. Ein paar einfache, klare Stichworte wie "Tipp eingegeben" o. ä. hätten genügt. Ich kann Dir auf die Entfernung nämlich Deine Wünsche nicht von den Augen ablesen.
Du kannst eine Gültigkeitsprüfung verwenden. Wenn z. B. A11:A16 der Bereich ist, in den die 6 Zahlen für einen Tipp eingegeben werden sollen, dann A11 markieren -- Daten -- Gültigkeit -- Einstellungen -- Zulassen: Benutzerdefiniert -- Formel:
=WENN(ZÄHLENWENN(A$11:A$16; A11) > 1; ""; A11)
-- Eingabemeldung und/oder Fehlermeldung angeben! -- OK.
A11:A16 markieren, Strg + U.
Gruß,
CaroS
Antwort 14 von nighty
hi all :)
hier der ausschluss bei der eingabe
einzufuegen
alt f11/projektexplorer/DeineTabelle
gruss nighty
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Cells(Target.Row, Target.Column) > 0 And Cells(Target.Row, Target.Column) < 50 Then
For t = 1 To 7
If Cells(Target.Row, Target.Column) = Range("A" & t) And Target.Row <> t Then
Cells(Target.Row, Target.Column) = ""
End If
Next t
Else
Cells(Target.Row, Target.Column) = ""
End If
Application.EnableEvents = True
End Sub
hier der ausschluss bei der eingabe
einzufuegen
alt f11/projektexplorer/DeineTabelle
gruss nighty
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Cells(Target.Row, Target.Column) > 0 And Cells(Target.Row, Target.Column) < 50 Then
For t = 1 To 7
If Cells(Target.Row, Target.Column) = Range("A" & t) And Target.Row <> t Then
Cells(Target.Row, Target.Column) = ""
End If
Next t
Else
Cells(Target.Row, Target.Column) = ""
End If
Application.EnableEvents = True
End Sub
Antwort 15 von nighty
hi all :)
beide varianten sind natuerlich den beduerfnissen anzupassen :)
gruss nighty
beide varianten sind natuerlich den beduerfnissen anzupassen :)
gruss nighty
Antwort 16 von CaroS
Hallo Kjatar,
ich muss die in AW5 angegebenen Formeln für B2:B7 korigieren. Das Prinzip (siehe AW3) ist richtig, die Umsetzung mit den Formeln war noch fehlerhaft. So funktioniert es:
A1: Überschrift: Hilfszahlen
B1: Überschrift: Lottozahlen 6 aus 40
A2: =GANZZAHL(ZUFALLSZAHL() * 40) + 1
A3: =GANZZAHL(ZUFALLSZAHL() * 39) + 1
A4: =GANZZAHL(ZUFALLSZAHL() * 38) + 1
A5: =GANZZAHL(ZUFALLSZAHL() * 37) + 1
A6: =GANZZAHL(ZUFALLSZAHL() * 36) + 1
A7: =GANZZAHL(ZUFALLSZAHL() * 35) + 1
B2: =A2
B3: =A3 + SUMMENPRODUKT((A$2:A2 <= A3 + SUMMENPRODUKT((A$2:A2 <= A3) * 1)) * 1)
B4: =A4 + SUMMENPRODUKT((A$2:A3 <= A4 + SUMMENPRODUKT((A$2:A3 <= A4) * 1)) * 1)
B5: =A5 + SUMMENPRODUKT((A$2:A4 <= A5 + SUMMENPRODUKT((A$2:A4 <= A5) * 1)) * 1)
B6: =A6 + SUMMENPRODUKT((A$2:A5 <= A6 + SUMMENPRODUKT((A$2:A5 <= A6) * 1)) * 1)
B7: =A7 + SUMMENPRODUKT((A$2:A6 <= A7 + SUMMENPRODUKT((A$2:A6 <= A7) * 1)) * 1)
Falls die gezogenen Zahlen sortiert angezeigt werden sollen, kannst Du dies in einer weiteren Spalte mit folgenden Formeln tun:
C1: Überschrift: Lottozahlen 6 aus 40 (sortiert)
C2 bis C7: =KKLEINSTE(B$2:B$7; ZEILE() - 1)
bzw.
C2: =KKLEINSTE(B$2:B$7; 1)
C3: =KKLEINSTE(B$2:B$7; 2)
C4: =KKLEINSTE(B$2:B$7; 3)
C5: =KKLEINSTE(B$2:B$7; 4)
C6: =KKLEINSTE(B$2:B$7; 5)
C7: =KKLEINSTE(B$2:B$7; 6)
Spalte A (und ggf. B) ausblenden.
Gruß,
CaroS
ich muss die in AW5 angegebenen Formeln für B2:B7 korigieren. Das Prinzip (siehe AW3) ist richtig, die Umsetzung mit den Formeln war noch fehlerhaft. So funktioniert es:
A1: Überschrift: Hilfszahlen
B1: Überschrift: Lottozahlen 6 aus 40
A2: =GANZZAHL(ZUFALLSZAHL() * 40) + 1
A3: =GANZZAHL(ZUFALLSZAHL() * 39) + 1
A4: =GANZZAHL(ZUFALLSZAHL() * 38) + 1
A5: =GANZZAHL(ZUFALLSZAHL() * 37) + 1
A6: =GANZZAHL(ZUFALLSZAHL() * 36) + 1
A7: =GANZZAHL(ZUFALLSZAHL() * 35) + 1
B2: =A2
B3: =A3 + SUMMENPRODUKT((A$2:A2 <= A3 + SUMMENPRODUKT((A$2:A2 <= A3) * 1)) * 1)
B4: =A4 + SUMMENPRODUKT((A$2:A3 <= A4 + SUMMENPRODUKT((A$2:A3 <= A4) * 1)) * 1)
B5: =A5 + SUMMENPRODUKT((A$2:A4 <= A5 + SUMMENPRODUKT((A$2:A4 <= A5) * 1)) * 1)
B6: =A6 + SUMMENPRODUKT((A$2:A5 <= A6 + SUMMENPRODUKT((A$2:A5 <= A6) * 1)) * 1)
B7: =A7 + SUMMENPRODUKT((A$2:A6 <= A7 + SUMMENPRODUKT((A$2:A6 <= A7) * 1)) * 1)
Falls die gezogenen Zahlen sortiert angezeigt werden sollen, kannst Du dies in einer weiteren Spalte mit folgenden Formeln tun:
C1: Überschrift: Lottozahlen 6 aus 40 (sortiert)
C2 bis C7: =KKLEINSTE(B$2:B$7; ZEILE() - 1)
bzw.
C2: =KKLEINSTE(B$2:B$7; 1)
C3: =KKLEINSTE(B$2:B$7; 2)
C4: =KKLEINSTE(B$2:B$7; 3)
C5: =KKLEINSTE(B$2:B$7; 4)
C6: =KKLEINSTE(B$2:B$7; 5)
C7: =KKLEINSTE(B$2:B$7; 6)
Spalte A (und ggf. B) ausblenden.
Gruß,
CaroS

