Supportnet / Forum / Tabellenkalkulation
Zufallsfunktion + eindeutig + need hilfe :)
Frage
Also liebe Supportnetcommunity,
folgendes Problem habe ich:
Ich hab den wunsch 100 zufallszahlen auszugeben - in einem 10 * 10 feld ( spalten a...j, zeilen 1...10)
. DIe Zahlen duerfen nicht doppelt vorkommen. es sollen auch nur zahlen von 1 bis 100 ausgegeben werden. laso keine 0 und auch keine zahlen höäher als 101...
habt ihr vielleicht eine idee?oder den code dafür?
mit der funktion rand kann man zufallszahlen generieren.. aber die kommen leider schon öfters vor. Außerdem sollen die Zahlen ohne Kommazahlen ausgegeben werden. Ich bdedanke mich schonmal ihm voraus bei ihnen.
mit freundlichen grüsen
QwErTz
Antwort 1 von JLM
Hallo
Hier ein kleiner Tip:
Hast dieser Hinweis aus der Excel Hilfe probiert ?
Mit der folgenden Anweisung können Sie eine reelle Zufallszahl erzeugen, die zwischen a und b liegt:
=ZUFALLSZAHL()*(b-a)+a
Ich habe die Formel enfach kopiert - Der ganze Bereich auf ganze Zahl formatiert
Ich hoffe das hilft dir ein bisschen weiter
Gruss
JLM
Hier ein kleiner Tip:
Hast dieser Hinweis aus der Excel Hilfe probiert ?
Mit der folgenden Anweisung können Sie eine reelle Zufallszahl erzeugen, die zwischen a und b liegt:
=ZUFALLSZAHL()*(b-a)+a
Ich habe die Formel enfach kopiert - Der ganze Bereich auf ganze Zahl formatiert
Ich hoffe das hilft dir ein bisschen weiter
Gruss
JLM
Antwort 2 von QwErTzUiOpÜ
DIe zahl sollte eindeutig sein - d.h es dürfen zB keine zwei 5 vorkommen. Leider geschieht dass bei deiner formel irgendwannmal.
trotzdem danke
trotzdem danke
Antwort 3 von Aliba
Hi,
mit ner Hilfsspalte könnte das folgednermaßen funzen:
In K1 die Formel:
=ZUFALLSZAHL()*ZUFALLSZAHL()*ZUFALLSZAHL()
Diese Formel bis K100 runterkopieren.
In A1 die Formel:
=RANG(INDIREKT(ADRESSE(ZEILE()*10-10+SPALTE();11));$K$1:$K$100)
Diese FOrmel bis J10 rüber- und runterkopieren.
Die Wahrscheinklichkeit von doppelten Zahlen sollte nahe 0 sein. Ausrechnen kann ich das nicht, aber bei ca. 1000 Versuchen waren keine doppelten dabei.
CU Aliba
mit ner Hilfsspalte könnte das folgednermaßen funzen:
In K1 die Formel:
=ZUFALLSZAHL()*ZUFALLSZAHL()*ZUFALLSZAHL()
Diese Formel bis K100 runterkopieren.
In A1 die Formel:
=RANG(INDIREKT(ADRESSE(ZEILE()*10-10+SPALTE();11));$K$1:$K$100)
Diese FOrmel bis J10 rüber- und runterkopieren.
Die Wahrscheinklichkeit von doppelten Zahlen sollte nahe 0 sein. Ausrechnen kann ich das nicht, aber bei ca. 1000 Versuchen waren keine doppelten dabei.
CU Aliba
Antwort 4 von QwErTzUiOpÜ
problem gelöst.
Antwort 5 von QwErTzUiOpÜ
oder so:
Formel A1: =WENN(ZÄHLENWENN($A$1:$J$10;A1)=1;A1;RUNDEN(ZUFALLSZAHL()*100+0,5;0))
die ziehste über den bereich a1:j10
danach änderst du die formel in J10: =5050-SUMME(A1:J9;A10:I10)
Formel A1: =WENN(ZÄHLENWENN($A$1:$J$10;A1)=1;A1;RUNDEN(ZUFALLSZAHL()*100+0,5;0))
die ziehste über den bereich a1:j10
danach änderst du die formel in J10: =5050-SUMME(A1:J9;A10:I10)
Antwort 6 von QwErTzUiOpÜ
danke für deine lösungsvorschlaf aliba :) scheint auch zu klappen :)
Antwort 7 von nighty
hi all :)
noch eine variante
gruss nighty
Sub makro01()
Randomize Timer
ReDim zuzahl(100) As Integer
Dim zahl(100) As Integer
Dim endeindex As Integer
Dim allezahlen As Integer
Dim ziehung As Integer
Dim gezogen As Integer
Dim x1 As Integer
Dim y1 As Long
x1 = 1
endeindex = 100
For allezahlen = 1 To 100
zuzahl(allezahlen) = allezahlen
Next allezahlen
For ziehung = 1 To 100
gezogen = Int(Rnd * endeindex) + 1
zahl(ziehung) = zuzahl(gezogen)
zuzahl(gezogen) = zuzahl(endeindex)
endeindex = endeindex - 1
ReDim Preserve zuzahl(endeindex)
y1 = y1 + 1
If y1 = 11 Then
x1 = x1 + 1
y1 = 1
End If
Cells(y1, x1) = zahl(ziehung)
Next ziehung
End Sub
noch eine variante
gruss nighty
Sub makro01()
Randomize Timer
ReDim zuzahl(100) As Integer
Dim zahl(100) As Integer
Dim endeindex As Integer
Dim allezahlen As Integer
Dim ziehung As Integer
Dim gezogen As Integer
Dim x1 As Integer
Dim y1 As Long
x1 = 1
endeindex = 100
For allezahlen = 1 To 100
zuzahl(allezahlen) = allezahlen
Next allezahlen
For ziehung = 1 To 100
gezogen = Int(Rnd * endeindex) + 1
zahl(ziehung) = zuzahl(gezogen)
zuzahl(gezogen) = zuzahl(endeindex)
endeindex = endeindex - 1
ReDim Preserve zuzahl(endeindex)
y1 = y1 + 1
If y1 = 11 Then
x1 = x1 + 1
y1 = 1
End If
Cells(y1, x1) = zahl(ziehung)
Next ziehung
End Sub
Antwort 8 von nighty
hi all :)
wobei in der ersten for next schleife statt der hundert auch zell angaben gemacht werden koennten (integer wie string wie auch eigene zahlensysteme) :)
hier nochmal ein lustiges zusatzproblem,das ganze buedde ohne zwei aufeinanderfolgende zahlen :)
bin noch am tueffteln :)
gruss nighty
wobei in der ersten for next schleife statt der hundert auch zell angaben gemacht werden koennten (integer wie string wie auch eigene zahlensysteme) :)
hier nochmal ein lustiges zusatzproblem,das ganze buedde ohne zwei aufeinanderfolgende zahlen :)
bin noch am tueffteln :)
gruss nighty
Antwort 9 von thomasn1975
Hehehe, die Lösung, dass zwei Zahlen nicht doppelt vorkommen dürfen, ist simpel:
Man schreibt alle Werte der Reihe nach in die Zellen.
Nun braucht man eine Funktion, die wieder der Reihe nach die einzelnen Zellen durchläuft und den Inhalt jeder Zelle mit einer zufällig ausgewählten anderen Zelle vertauscht. Das ganze kann man mehrmals durchlaufen lassen, um die Verteilung zu verbessern.
Man schreibt alle Werte der Reihe nach in die Zellen.
Nun braucht man eine Funktion, die wieder der Reihe nach die einzelnen Zellen durchläuft und den Inhalt jeder Zelle mit einer zufällig ausgewählten anderen Zelle vertauscht. Das ganze kann man mehrmals durchlaufen lassen, um die Verteilung zu verbessern.

