Supportnet Computer
Planet of Tech

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

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

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

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)

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

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

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.

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


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: