Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Zahlengenerator
#1
Hallo!

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.

Wie würde das gehen?

Danke

Gruß Markus
Antworten Top
#2
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:
  • Redgeier
Antworten Top
#3
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))
Antworten Top
#4
Code:
Sub M_snb()
  sp = [transpose(row(1:49))]
  [A1:A50] = "=rand()"
  sn = [index(rank(A1:A50,A1:A50),)]
 
  MsgBox Join(Array(sp(sn(1, 1)), sp(sn(2, 1)), sp(sn(3, 1)), sp(sn(4, 1)), sp(sn(5, 1)), sp(sn(6, 1))), vbLf)
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#5
Hallo Markus,

Deine Aufgabe ist m. E. eine Teilmenge der Funktionalität meines Testdatengenerators:
http://www.sulprobil.com/sbgeneratetestdata_en/

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.

Viele Grüße,
Bernd
Antworten Top
#6
Mitleid mit Lupo1: nur 2 sehr einfache Excel-Formel Rand & Rank.
F9 oder Button benützen.


Angehängte Dateien
.xlsb   __mitleid.xlsb (Größe: 18,07 KB / Downloads: 4)
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#7
@snb: 
  • RANK (RANG) ist eine etwas "behinderte" Excel-Funktion (muss z.B. immer von ZUFALLSZAHL()-Funktionen getrennt sein; außerdem s.u.). 
  • Außerdem hat MS bei den vielen RANG-Versionen es nicht geschafft, alle wirklich relevanten Fragen zu erschlagen.
  • Und wenn Du Deine 4 (unvermeidlichen!) Zeilen gegenüber meiner einen wirklich so viel besser findest, dann joine doch mal händisch 27 aus 49.
  • [A1].Formula2R1C1 = "=INDEX(SORTBY(SEQUENCE(49),RANDARRAY(49)),SEQUENCE(27))"

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


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste