Ich habe einen Zahlengenerator (für 6 Zahlen - wie beim Lotto) erstellt, wobei alle auszugebenden Zahlen nur 1x vorkommen sollen. Ab B3 (bis B8) werden nun meine 6 Zahlen (im Zahlenbereich 1-49) angezeigt.
Hier der Code:
Sub ZahlenGenerator() Dim i As Integer, zahlen(5), j As Integer
Randomize ' Erste Zahl ziehen, Variable belegen zahlen(0) = Int(Rnd * 49) + 1 ' Die nächsten 5 Zahlen For i = 1 To 5 Randomize zahlen(i) = Int(Rnd * 49) + 1 ' Prüfen, ob Zahl schon gezogen ist For j = 0 To i - 1 If zahlen(j) = zahlen(i) Then 'Zahl schon gezogen i = i - 1 Exit For End If Next j Next i ' Ausgabe der Zahlen in der Tabelle ab B3 For i = 0 To 5 Sheets("Tabelle1").Cells(i + 3, 2).Value = zahlen(i) Next i
End Sub
Ich möchte am Anfang nun eine Abfrage über eine InputBox ("Wie viele Zahlen sollen ausgegeben werden?") machen. Hier wird die Anzahl der auszugebenden Zahlen eingetragen. Z.B. 10. Dann sollen ab B3 die 10 Zahlen (also 1, 2, 3 ..10 - in zufälliger Reihenfolge) bis B12 eingetragen werden.
08.03.2022, 16:27 (Dieser Beitrag wurde zuletzt bearbeitet: 08.03.2022, 16:32 von Elex.)
Hi
z.B. so
Code:
Public Sub ZufallB() Dim Zahlen, Ausgabe, Anzahl, k As Integer
Sheets("Tabelle1").Range("B3:B100").ClearContents Anzahl = InputBox("Anzahl eingeben", , 1) If IsNumeric(Anzahl) Then With CreateObject("System.Collections.Arraylist") Randomize Do k = Int(Rnd * 49) + 1 If Not .Contains(k) Then .Add (k) End If Loop While Int(Anzahl) > .Count Sheets("Tabelle1").Range("B3").Resize(Int(Anzahl)) = Application.Transpose(.toarray) End With End If End Sub
Gruß Elex
Folgende(r) 1 Nutzer sagt Danke an Elex für diesen Beitrag:1 Nutzer sagt Danke an Elex für diesen Beitrag 28 • Redgeier
08.03.2022, 17:03 (Dieser Beitrag wurde zuletzt bearbeitet: 08.03.2022, 17:14 von LCohen.)
Ihr armen Antikexcelanten! In XLWeb, XL365, XL2021 alternativ: =LET(z;ZUFALLSMATRIX(49);VERGLEICH(INDEX(z;SEQUENZ(6));SORTIEREN(z))) =INDEX(SORTIERENNACH(SEQUENZ(49);ZUFALLSMATRIX(49));SEQUENZ(6))
Wehrdienst für nach 31.12.2007 geborene Männer. Freiwilligkeit wird nicht ausreichen; also gibt es das Losverfahren mit daraus mehr als 50% Dienstverpflichteten. Herzlichen Glückwunsch. (Ich habe 15 Monate in der Lw gedient). Weiße Jahrgänge der Bw also ca. -1937 und 1994-2007. Alternativen wie Zivildienst/Verweigerung/Soziales Jahr noch nicht besprochen.
Mir war damals wichtig, dass sich die generierten Daten nicht ständig ändern, wenn F9 gedrückt wird, sondern genau dann, wenn ich die Daten durch Drücken des Makroknopfes neu erzeugen will.
D1:D8: 1 5 4 3 3 4 5 1 =RANG(D1:D8;EINDEUTIG(D1:D8)) klappt nicht =LET(d;D1:D8;r;EINDEUTIG(d);RANG(d;r)) klappt nicht Erst =RANG(D1:D8;D10#) mit D10: =EINDEUTIG(D1:D8) klappt wie gewünscht: 4 1 2 3 3 2 1 4. Also nur mit physischem Zelleintrag des Zwischenergebnisses.
Wehrdienst für nach 31.12.2007 geborene Männer. Freiwilligkeit wird nicht ausreichen; also gibt es das Losverfahren mit daraus mehr als 50% Dienstverpflichteten. Herzlichen Glückwunsch. (Ich habe 15 Monate in der Lw gedient). Weiße Jahrgänge der Bw also ca. -1937 und 1994-2007. Alternativen wie Zivildienst/Verweigerung/Soziales Jahr noch nicht besprochen.