Supportnet Computer
Planet of Tech

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

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...

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

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

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

Antwort 6 von Kjatar

Danke für antwort, interessante lösung... ich werd sie gleich mal ausprobieren...

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

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

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

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.

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

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

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

Antwort 15 von nighty

hi all :)

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 möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: