Zufallszahlen generieren
#1
Hallo zusammen!

Da ich mich leider nur sehr rudimentär in Excel auskenne, möchte ich mich in diesem Forum erkundigen, ob sich jemand meinem Problem annehmen könnte... sofern dies überhaupt lösbar ist.

Meine Aufgabenstellung:
Es müssen Spiel-Karten mit 4 Feldern und wechselnden Zahlen von 0 bis 36 generiert werden.
Die Zahlen müssten für jeweils 1000, 2000 oder 4000 Karten "zusammengewürfelt" werden und dürften natürlich jeweils nur 1x vorkommen.
Da die Daten danach in InDesign importiert werden (Datenzusammenführung), müssten also 4 Spalten mit den jeweiligen Zahlenkombinationen (1 bis 36 / für 1000, 2000 oder 4000 Karten) vorhanden sein.

Vielen herzlichen Dank im voraus für allfällige Lösungsvorschläge!  Blush

Gruss
Thomas
Top
#2
Hallo Thomas,

aslo grundsätzlich kannst Du Zufallswerte so generieren.

Arbeitsblatt mit dem Namen 'Tabelle1'
 ABCD
121291027

ZelleFormel
A1=ZUFALLSBEREICH(1;36)
B1=ZUFALLSBEREICH(1;36)
C1=ZUFALLSBEREICH(1;36)
D1=ZUFALLSBEREICH(1;36)


Allerdings versteh ich nicht wie bei bspw. 1000 Karten jeder Wert nur 1x vorkommen soll?
(25.02.2015, 10:50)ThomasK schrieb: ...
Die Zahlen müssten für jeweils 1000, 2000 oder 4000 Karten "zusammengewürfelt" werden und dürften natürlich jeweils nur 1x vorkommen.
...

Gruß
Max
Top
#3
Hallo Max!

Vielen Dank für die rasche Antwort. Genau da liegt mein Problem...
Ich müsste doch eigentlich jeweils 1000, 2000 oder 4000 Zeilen haben, wobei in den 4 Spalten die Zahlen schon "gemischt" sind...?

Gruss und Dank
Thomas
Top
#4
Hallo Thomas,

aslo die Formel kannst Du nach unten ziehen.
Das löst aber das Problem nicht.
Wenn ich 36 Kartenwerte habe und einen Kartenstapel mit 1000 Karten, dann kann jede Karte 27,7 Mal (1000/36) in diesem Stapel vorkommen, oder?

Gruß
Markus
Top
#5
Hallo Max!

Ich muss die Ziffern 0 bis 36 – also 37 Zahlen verwenden.
Diese werden in beliebiger Kombination von 4 Ziffern pro Blatt abgedruckt...
das ergibt doch mehr als 1000 Kombinationen...?

0 / 1 / 2 / 4  bis  0 / 34 / 35 / 36  natürlich muss die Reihenfolge zufällig sein:
z.B. 9 / 17 / 23 / 35 oder so...

Danke für die Hilfe!

Gruss
Thomas
Top
#6
Hallo Thomas,

irgendwie reden wir aneinander vorbei Dodgy  Huh .

Okay das mit den Werten von 0 bis 36 ist das kleinste Problem.
Die Formel einfach wie folgt ändern:
Code:
=ZUFALLSBEREICH(0;36)

Mir geht es nicht um die Anzahl der Kombinationen, sondern um das Vorkommen der einzelnen Werte! Wobei das natürlich dann auch die Anzahl der Kombinationen begrenzt :32:.
Wenn ich ein Kartendeck aus 1000 Karten habe dann kann jede Karte (0 bis 36) rund 27 Mal in deinem Deck vorkommen, oder? Nämlich 1000 Karten dividiert durch 37 Kartenwerte.
Oder anders ausgedrückt:
Ein Deck aus 1000 Karten besteht aus 27 Kartenspielen mit je 37 Karten?
Oder darf jede Karte nur 1x Mal vorkommen? Dann wäre die Frage, was ist mit den anderen 963 Karten im Deck?

Gruß
Max
Top
#7
Hallo Max

Ja, ich denke es liegt wohl an meiner "Erklärung"... Angel  

– ich habe 1000 (oder 2000... oder 4000) Karten
– auf jeder Karte sind 4 beliebige (1- oder 2stellige) Ziffern
– die Ziffern sind von 0 bis 36 beliebig (wie eine BINGO-Karte)
– sämtliche Ziffern-Kobinationen dürfen NUR 1x vorkommen

Hoffe, diese Auflistung ist etwas verständlicher...  Huh  sorry!


Gruss und Dank
(bin aber erst morgen wieder online)
Thomas
Top
#8
Hallo,

wenn ich es richtig verstanden habe, dann kann das nur mit VBA gehen.

Ich habe unten mal einen Code zusammengebastelt, der das machen sollte, was ich verstanden habe, was Du möchtest.

Code:
Option Explicit

Sub tausender()
 Dim j As Long, i As Long
 Dim lozahl As Long
 Dim varKey
 Dim varFeld1
 Dim arr1()
 Dim objDic As Object
 Dim arrZahlen
 Set objDic = CreateObject("Scripting.Dictionary")
 Do
   Do
     Randomize
     lozahl = Application.WorksheetFunction.RandBetween(0, 36) 'sechs unterschiedliche Zufallszahlen generieren
     If InStr(arrZahlen, lozahl) = 0 Then
       arrZahlen = lozahl & " " & arrZahlen     'Zufallszahlen in ein mit Leerzeichen getrennt in ein Array schreiben
       i = i + 1
     End If
   Loop While i < 4
   varKey = arrZahlen
   If InStr(objDic(varKey), arrZahlen) = 0 Then
       objDic(varKey) = arrZahlen
       j = j + 1
   End If
   arrZahlen = ""
   i = 0
 Loop While j < 1001

 j = 0
 ReDim arr1(objDic.Count - 1, 3)
 For Each varKey In objDic
     For i = 0 To UBound(Split(objDic(varKey))) - 1
         arr1(j, i) = Split(objDic(varKey))(i)
     Next i
      j = j + 1
 Next varKey
 
 Range("A1:D1000") = arr1
 
End Sub

Den Code in ein Modul einfügen und starten.
Es wird in den Bereich A!:D100 der aktiven Tabelle geschrieben.
Gruß Atilla
Top
#9
Hallo,

ich habe mich auch mal versucht:


Code:
Option Explicit

Sub Klick()
 Dim loB As Long
 Dim lozahl As Long
 Dim arrZahlen, arrZahlen2(3), arrZahlen3(999)
 Dim loA As Long
 Dim bolTreffer As Boolean
 Application.ScreenUpdating = False
 
    loA = 0
Do
    bolTreffer = False
    arrZahlen = ""
    Do
      Randomize
      lozahl = Application.WorksheetFunction.RandBetween(0, 36) 'vier unterschiedliche Zufallszahlen generieren
      If InStr(arrZahlen, lozahl) = 0 Then
        arrZahlen = lozahl & " " & arrZahlen     'Zufallszahlen in ein mit Leerzeichen getrennt in ein Array schreiben
        arrZahlen2(loB) = lozahl
        loB = loB + 1
      End If
    Loop While loB < 4
    
    For loB = 0 To 3
       arrZahlen3(loA) = arrZahlen3(loA) & WorksheetFunction.Small(arrZahlen2, loB + 1) & " " 'Mit kkleinste sortiert den Arrayinhalt wieder zurückschreiben
    Next
    If loA > 0 Then
        For loB = 0 To loA - 1
            If arrZahlen3(loB) = arrZahlen3(loA) Then bolTreffer = True
        Next
    End If
        If bolTreffer = False Then loA = loA + 1

        loB = 0
    
 Loop While loA < 1000
 For loA = 0 To 999
    Range(Cells(loA + 1, 1), Cells(loA + 1, 4)) = Split(arrZahlen3(loA), " ")
 Next
 With Range("A1:D1000")
 .NumberFormat = "General"
 .Value = .Value
 End With
Application.ScreenUpdating = True
End Sub
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top
#10
Hallo Edgar,

das trifft sich jetzt gut. Gestern noch mit Zufallszahlen rumhantiert und heute kommt dann eine Frage dazu.
So kann man dann Neue gleich anwenden und besser abspeichern.
Ich habe das Gefühl, dass Deine Variante etwas schneller ist als meine obwohl Du die Zahlen noch zusätzlich 
sortierst. War vom TE zwar nicht verlangt aber vielleicht kommt er ja auf den Geschmack.

Die äußere Do Schleife von mir kann sicher noch optimiert werden. Ich schau mir das heute Abend noch mal an.
Gruß Atilla
Top


Gehe zu:


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