Supportnet / Forum / Tabellenkalkulation
randomisierte Zaheln in Excel
Frage
Hallo Excel Gurus und die die es noch werden wollen,
eine (bestimmt) simple Frage:
wir hätten gerne eine Liste erstellt, die die Zahlen von 0001 bis 9999 randomisiert wieder gibt, geht so etwas mit Excel, wenn ja, wie??
Über einen Tip wären wir dankbar..
gruß
Leif
Antwort 1 von Primut
Hi Leif,
habe ich recht verstanden, du möchtest eine LIste haben mit den Zahlen von 1 bis 9999, wobei die Anordnung dieser Zahlen zufällig sein soll?
Eine einzige Zufallszahl im Bereich von 1 bis 9999 wäre
allerdings müßtest du ja bei 9999 Zahlen ausschließen, daß sich Zahlen zufällig doppeln, das ist dann schon komplizierter.
Erstmal soweit als Gedankenanregung,
Gruß Primut
habe ich recht verstanden, du möchtest eine LIste haben mit den Zahlen von 1 bis 9999, wobei die Anordnung dieser Zahlen zufällig sein soll?
Eine einzige Zufallszahl im Bereich von 1 bis 9999 wäre
=AUFRUNDEN(ZUFALLSZAHL()*9999;0)
allerdings müßtest du ja bei 9999 Zahlen ausschließen, daß sich Zahlen zufällig doppeln, das ist dann schon komplizierter.
Erstmal soweit als Gedankenanregung,
Gruß Primut
Antwort 2 von Leif
genau zufällige zahlen von 0001 bis 9999
in jede Reihe eine, hab nur keine ahnung von Excel Formeln und so :/
in jede Reihe eine, hab nur keine ahnung von Excel Formeln und so :/
Antwort 3 von Leif
Gucken sich ja alle immer nur die 2. Seite an *sorry push*
also die Idee von Primut ist klasse, nur ich denke nicht es ist ausgeschlossen damit dass sich 2 zeilen wiederholen oder?
also die Idee von Primut ist klasse, nur ich denke nicht es ist ausgeschlossen damit dass sich 2 zeilen wiederholen oder?
Antwort 4 von Primut
Hey Leif,
als kurze Info:
Du suchst offensichtlich keine Zufallszahlen innerhalb eines (ausgewählten) Bereiches sondern du suchst eine Zufallsverteilung aller Zahlen dieses Bereiches.
Das ist leider ein grundsätzlicher Unterschied, mit obiger Formel lassen sich nur Zufallszahlen bereitstellen.
In deiner Zufallszahlenliste wäre nämlich nur die erste Zahl eine echte Zufallszahl, alle anderen sind bedingte Zufälle (bzw. Zufallszahlen mit eingeschränketem Bereich), weil sie von den vorhergehenden Zahlen abhängen. Die Anzahl der Bedingungen nimmt also auch mit der Zahlenanzahl gesamt zu.
Das geht nicht über eine Formel, theoretisch müßte das programmiert werden mit VBA, weil für jede einzelne Zahl der 9998 Zahlen alle Bedingungen abgefragt werden müßten.
Allerdings ist das sowohl rechentechnisch als auch programmiertechnisch recht aufwendig, daß ich denke, man sollte sich überlegen, ob sich dieser Aufwand lohnt.
Keine Ahnung, was du damit machen willst, zumindest ist es ja keine Standardanwendung / -berechnung.
Vielleicht findest du ja andere Möglichkeiten, dein Problem zu lösen (zB mathematisch über Wahrscheinlichkeitsverteilung etc) oder es findes sich ein, VBA-Profi, der genug Zeit und Lust hat.
Beste Grüße
Primut
als kurze Info:
Du suchst offensichtlich keine Zufallszahlen innerhalb eines (ausgewählten) Bereiches sondern du suchst eine Zufallsverteilung aller Zahlen dieses Bereiches.
Das ist leider ein grundsätzlicher Unterschied, mit obiger Formel lassen sich nur Zufallszahlen bereitstellen.
In deiner Zufallszahlenliste wäre nämlich nur die erste Zahl eine echte Zufallszahl, alle anderen sind bedingte Zufälle (bzw. Zufallszahlen mit eingeschränketem Bereich), weil sie von den vorhergehenden Zahlen abhängen. Die Anzahl der Bedingungen nimmt also auch mit der Zahlenanzahl gesamt zu.
Das geht nicht über eine Formel, theoretisch müßte das programmiert werden mit VBA, weil für jede einzelne Zahl der 9998 Zahlen alle Bedingungen abgefragt werden müßten.
Allerdings ist das sowohl rechentechnisch als auch programmiertechnisch recht aufwendig, daß ich denke, man sollte sich überlegen, ob sich dieser Aufwand lohnt.
Keine Ahnung, was du damit machen willst, zumindest ist es ja keine Standardanwendung / -berechnung.
Vielleicht findest du ja andere Möglichkeiten, dein Problem zu lösen (zB mathematisch über Wahrscheinlichkeitsverteilung etc) oder es findes sich ein, VBA-Profi, der genug Zeit und Lust hat.
Beste Grüße
Primut
Antwort 5 von Event
Hallo
Folgendes makro in ein Standardmodul kopieren:
und über Extras > Makro > Makros Ausführen starten.
Kann etwas dauern die letzte Zahl sucht er am längsten.
Gruß
Folgendes makro in ein Standardmodul kopieren:
Option Explicit
Sub zufall()
Dim z%, t%, i%, m%, zz(10000) As Integer
i = 1
z = Int((9999) * Rnd() + 1)
zz(i) = z
Do While i < 9999
z = Int((9999) * Rnd() + 1)
´Debug.Print i;
m = 0
For t = 0 To i + 1
If zz(t) = z Then m = 1
Next
If m = 0 Then
i = i + 1
zz(i) = z
End If
Loop
´Ausgabe
For i = 1 To 9999
Cells(i, 1) = zz(i)
Next
End Sub
und über Extras > Makro > Makros Ausführen starten.
Kann etwas dauern die letzte Zahl sucht er am längsten.
Gruß
Antwort 6 von Primut
Hi,
@ Event
verdammten Respekt,
läuft gut, mal abgesehen von der Rechenzeit,
ich war halt nicht so schnell mit dem Makro, vielleicht fehlt mit ja noch die Routine, aber kann ja nur besser werden im neuen Jahr ;-)
@ Leif
Ich gehe davon aus, du weißt wie Makros funktionieren...,
bei den Kommentaren müssen natürlich die richtigen Hochkommas gesetzt werden, das läuft hier leider noch nicht wirklich ...
beste Grüße
Primut
@ Event
verdammten Respekt,
läuft gut, mal abgesehen von der Rechenzeit,
ich war halt nicht so schnell mit dem Makro, vielleicht fehlt mit ja noch die Routine, aber kann ja nur besser werden im neuen Jahr ;-)
@ Leif
Ich gehe davon aus, du weißt wie Makros funktionieren...,
bei den Kommentaren müssen natürlich die richtigen Hochkommas gesetzt werden, das läuft hier leider noch nicht wirklich ...
beste Grüße
Primut
Antwort 7 von Event
Hey Primu(s+1)
Danke
Aber das war der erste lauffähige Versuch ohne Optimierung.
Gruß
Danke
Aber das war der erste lauffähige Versuch ohne Optimierung.
Gruß
Antwort 8 von Tango1000
Hallo Leif,
wenn es dir nur darum geht, die Zahlen "zu mischen", dann habe ich hier eine einfache Lösung ohne VBA-Programmierung für dich:
In Spalte A schreibst die zu mischenden Zahlen untereinander - in deinem Fall also von 1 bis 9999 in den Zellen A1 bis A9999.
In Spalte B kommt in jede Zelle der Eintrag =zufallszahl().
In die Spalte C kommt in die Zelle C1 die Formel =INDEX(A$1:A$155;VERGLEICH(KKLEINSTE(B$1:B$155;ZEILE());B$1:B$1550;0)). Nun kopierst du diese bis zur Zelle C9999 herunter.
So erhältst du in Spalte C die gemischten Zahlen. Und jedes Mal wenn du die F9-Taste drückst, gibt es eine neue Mischung.
Viel Spaß damit - André.
wenn es dir nur darum geht, die Zahlen "zu mischen", dann habe ich hier eine einfache Lösung ohne VBA-Programmierung für dich:
In Spalte A schreibst die zu mischenden Zahlen untereinander - in deinem Fall also von 1 bis 9999 in den Zellen A1 bis A9999.
In Spalte B kommt in jede Zelle der Eintrag =zufallszahl().
In die Spalte C kommt in die Zelle C1 die Formel =INDEX(A$1:A$155;VERGLEICH(KKLEINSTE(B$1:B$155;ZEILE());B$1:B$1550;0)). Nun kopierst du diese bis zur Zelle C9999 herunter.
So erhältst du in Spalte C die gemischten Zahlen. Und jedes Mal wenn du die F9-Taste drückst, gibt es eine neue Mischung.
Viel Spaß damit - André.
Antwort 9 von nighty
hi ihr :)
hier eine variante mit reduzierung des array
gruss nighty
Option Explicit
Sub makro01()
Randomize Timer
ReDim zuzahl(1000) As Integer
Dim zahl(1000) As Integer
Dim endeindex As Integer
Dim allezahlen As Integer
Dim ziehung As Integer
Dim gezogen As Integer
endeindex = 1000
For allezahlen = 1 To 1000
zuzahl(allezahlen) = allezahlen
Next allezahlen
For ziehung = 1 To 1000
gezogen = Int(Rnd * endeindex) + 1
zahl(ziehung) = zuzahl(gezogen)
zuzahl(gezogen) = zuzahl(endeindex)
endeindex = endeindex - 1
ReDim Preserve zuzahl(endeindex)
Cells(ziehung, 1) = zahl(ziehung)
Next ziehung
End Sub
hier eine variante mit reduzierung des array
gruss nighty
Option Explicit
Sub makro01()
Randomize Timer
ReDim zuzahl(1000) As Integer
Dim zahl(1000) As Integer
Dim endeindex As Integer
Dim allezahlen As Integer
Dim ziehung As Integer
Dim gezogen As Integer
endeindex = 1000
For allezahlen = 1 To 1000
zuzahl(allezahlen) = allezahlen
Next allezahlen
For ziehung = 1 To 1000
gezogen = Int(Rnd * endeindex) + 1
zahl(ziehung) = zuzahl(gezogen)
zuzahl(gezogen) = zuzahl(endeindex)
endeindex = endeindex - 1
ReDim Preserve zuzahl(endeindex)
Cells(ziehung, 1) = zahl(ziehung)
Next ziehung
End Sub
Antwort 10 von Leif
Oha!
Wenn man hier für etwas Hilfe erwarten kann, dann Excel!
@ Primut: nein hab keine "Makro Erfahrung" aber ich google mal und werde dann sicher rausfinden was du meinst, ist irgendwie komisch geschrieben.
Wenn man hier für etwas Hilfe erwarten kann, dann Excel!
@ Primut: nein hab keine "Makro Erfahrung" aber ich google mal und werde dann sicher rausfinden was du meinst, ist irgendwie komisch geschrieben.
Antwort 11 von woher
Hallo,
für die Lösung dieser Aufgabe genügen 2 einfache Formeln:
In den Zellen A1 bis A9999: =ZUFALLSZAHL()
In den Zellen B1 bis B9999: =RANG(A1;$A$1:$A$9999)
Die Zufallszahlen haben bis zu 15 Nachkommastellen, die Wahrscheinlichkeit, das sich unter nur 9999 Zahlen
2 Zufallszahlen wiederholen, ist erheblich niedriger als 6 Richtige im Lotto.
mfg
woher
für die Lösung dieser Aufgabe genügen 2 einfache Formeln:
In den Zellen A1 bis A9999: =ZUFALLSZAHL()
In den Zellen B1 bis B9999: =RANG(A1;$A$1:$A$9999)
Die Zufallszahlen haben bis zu 15 Nachkommastellen, die Wahrscheinlichkeit, das sich unter nur 9999 Zahlen
2 Zufallszahlen wiederholen, ist erheblich niedriger als 6 Richtige im Lotto.
mfg
woher
Antwort 12 von Primut
Hi all,
gibt ja ein Glück genug Excel Profis und interessante Lösungen! Sehr schön dabei: man lernt nie aus.
@ woher
Klar, hast natürlich Recht, aber es sollte kein automatischer Berechnungsmodus eingestellt sein. Und es dauert ein wenig bei so vielen Zellen.
@ Leif, falls du Nightys sehr elegante schnelle Makroversion benutzen möchtest findest du hier, unter Anleitung / Modul (3), wie man sie einbaut. Anbei noch mal dieses Makro so angepasst, daß du am Anfang bei Maximum den gewünschen Zahlenbereich eingeben kannst.
@Nighty , dynamischers Array zur Bereichsverkleinerung; nicht schlecht. Muß ich mir merken....
Gruß Primut
gibt ja ein Glück genug Excel Profis und interessante Lösungen! Sehr schön dabei: man lernt nie aus.
@ woher
Klar, hast natürlich Recht, aber es sollte kein automatischer Berechnungsmodus eingestellt sein. Und es dauert ein wenig bei so vielen Zellen.
@ Leif, falls du Nightys sehr elegante schnelle Makroversion benutzen möchtest findest du hier, unter Anleitung / Modul (3), wie man sie einbaut. Anbei noch mal dieses Makro so angepasst, daß du am Anfang bei Maximum den gewünschen Zahlenbereich eingeben kannst.
Option Explicit
Sub Zahlenmischung()
Randomize Timer
Const Maximum = 9999
Dim allezahlen As Integer
Dim ziehung As Integer
Dim gezogen As Integer
ReDim zuzahl(Maximum) As Integer
Dim zahl(Maximum) As Integer
Dim endeindex As Integer
endeindex = Maximum
For allezahlen = 1 To Maximum
zuzahl(allezahlen) = allezahlen
Next allezahlen
For ziehung = 1 To Maximum
gezogen = Int(Rnd * endeindex) + 1
zahl(ziehung) = zuzahl(gezogen)
zuzahl(gezogen) = zuzahl(endeindex)
endeindex = endeindex - 1
ReDim Preserve zuzahl(endeindex)
Cells(ziehung, 1) = zahl(ziehung)
Next ziehung
End Sub
@Nighty , dynamischers Array zur Bereichsverkleinerung; nicht schlecht. Muß ich mir merken....
Gruß Primut
Antwort 13 von Leif
Hallo,
danke dafür, funktioniert soweit auch super,
nur ist es noch möglich dass die Zahlen mit 0 aufgefüllt werden.
also dass dort nicht 68 steht sondern 0068?!
gruß
Leif
danke dafür, funktioniert soweit auch super,
nur ist es noch möglich dass die Zahlen mit 0 aufgefüllt werden.
also dass dort nicht 68 steht sondern 0068?!
gruß
Leif
Antwort 14 von Event
Hallo
Am einfachsten wohl über ein benutzerdefiniertes Format:
0000 (viermal Null)
Gruß
Am einfachsten wohl über ein benutzerdefiniertes Format:
0000 (viermal Null)
Gruß
Antwort 15 von Menke-Point
Hallo das ist einfach du makierst die entsprechenden Zellen und gehst dann mit rechten Mausklick auf das Makierte und linken Mausklick auf Zellen formatieren.
Dann gehst du unter Zahlen (Oben) dann links unter Benutzerdefiniert und dann gibste bei Typ 0000ein
viel Spaß
Menke-Point
Dann gehst du unter Zahlen (Oben) dann links unter Benutzerdefiniert und dann gibste bei Typ 0000ein
viel Spaß
Menke-Point
Antwort 16 von Leif
danke euch allen!
Nun bin ich glücklich bedient.
Nun bin ich glücklich bedient.