Supportnet Computer
Planet of Tech

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
=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 :/

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?

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

Antwort 5 von Event

Hallo

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

Antwort 7 von Event

Hey Primu(s+1)

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

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

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.

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

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.

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

Antwort 14 von Event

Hallo
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

Antwort 16 von Leif

danke euch allen!

Nun bin ich glücklich bedient.

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: