Clever-Excel-Forum

Normale Version: Zufallsgenerator 10-Stellige Zahlen, jede Ziffer nur einmal
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Ich bin am Verzweifeln, vielleicht kann mir hier jemand helfen.

Ich versuche einen Zahlengenerator im Excel zu basteln.

Voraussetzung:
Die Zahlen sollen 10-Stellig sein
Ich brauche mehrere hundert von solchen Zahlen, jede soll einzigartig sein
In jeder Zahl darf jede Ziffer nur einmal vorkommen

Beispiel:

1649875320
7059413826
5709631428
usw.

Alles was ich bisher versucht habe, klappt allerdings nicht.   16

Grüße
Philipp
Moin!

Mein Hobby!  19:


ABC
1Stellen102.661.387.815
2versch_Zahlen154.598.504.004
32.170.735.435
41.447.823.002
51.551.592.975
68.632.648.134
74.959.961.786
87.312.922.270
98.399.318.970
106.882.453.177
116.382.104.123
123.738.586.121
132.191.529.614
141.746.090.941
156.355.075.818
16

ZelleFormel
C1=LET(m_min;10^(B1-1);
m_max;10^B1-1;
SORTIERENNACH
(ZUFALLSMATRIX(B2;;m_min;m_max;1);ZUFALLSMATRIX(B2)))


Gruß Ralf

geht natürlich sehr viel einfacher …

EFG
1min10000000008403049541
2max99999999999193602418
3versch_Zahlen152322962742
44174583588
51691089698
65809044349
72331777362
81827793007
97568250090
102717870713
116882879398
126656403743
132300048607
149527559743
157670548901

ZelleFormel
F1=10^9
G1=ZUFALLSMATRIX(F3;;F1;F2;1)
F2=10^10-1
@Ralf:
Du hast nicht richtig gelesen: Jede Ziffer 0-9 soll nur einmal(!) vorkommen!

Gruß Sigi
Wohl wahr!
Danke für den Hinweis!

Dann schaun wir mal, was mir dazu einfällt …

Sowas in der Art?

M
23278046159
30579628431
41365479820
54251793806
60673254891
77965032841
88457392016
91578049362
100279436158
111879240635
124568391027
135412683970

ZelleFormel
M2=TEXTKETTE(SORTIERENNACH(SEQUENZ(10;;0);ZUFALLSMATRIX(10)))

Formel herunterziehen.
Fast, eine Voraussetzung ist (frag nicht warum 19 ), dass jede Ziffer in der jeweiligen Zahl nur einmal vorkommt. 
2661387815 darf es demnach nicht sein, dafür aber zum Beispiel 7643895120.

Ich bin nicht so Excelbewandert, habe aber eine für mich funktionierende, wenn nicht wirklich elegante, Lösung gefunden. Leider weiß ich gerade nicht, wie ich das hier reinposten kann.  92

Wow, gerade erst gesehen, danke Ralf!!! Diese Lösung ist viel besser!!  74
Hallo,

anbei eine Variante, die in Spalte A die Werte generiert. Wenn alle Werte eindeutig sind, müssten diese in Spalte B denen in Spalte A entsprechen (Check also).

PHP-Code:
A1=LET(Anzahl;100;MATRIXERSTELLEN(Anzahl;1;LAMBDA(X;Y;TEXTKETTE(MTRANS(SORTIERENNACH(SEQUENZ(10;1;0);ZUFALLSMATRIX(10;1;1;10;WAHR)))))))
B1=EINDEUTIG(A1#) 

Und für den Fall, dass man Doppler generell ausschließen möchte, das Ganze nochmal als rekursive Funktion.

PHP-Code:
=LET(Anzahl;100;fnMatrix;LAMBDA(This;Count;LET(M;MATRIXERSTELLEN(Count;1;
 LAMBDA(X;Y;TEXTKETTE(MTRANS(SORTIERENNACH(SEQUENZ(10;1;0);ZUFALLSMATRIX(10;1;1;10;WAHR))))));
 WENN(ZEILEN(EINDEUTIG(M))<>ZEILEN(M);This(This;Count);M)));fnMatrix(fnMatrix;Anzahl)) 

Möglicherweise wäre letzteres mit den Beta-Funktion VSTACK und/oder REDUCE einfacher.

Gruß
Moin Mourad!

Verständnisfragen:
• Warum nimmst Du zum Sortieren eine Ganzzahl-Matrix, die Doppler extrem wahrscheinlich macht?
Ich würde statt
ZUFALLSMATRIX(10;1;1;10;WAHR)
mein obiges nehmen
ZUFALLSMATRIX(10)

• Warum transponierst Du?
Mir würde folgendes bereits reichen:
(übrigens Danke für das Beispiel mit MATRIXERSTELLEN(), hab die Funktion jetzt endlich verstanden!)
=MATRIXERSTELLEN(100;1;LAMBDA(x;y;TEXTKETTE(SORTIERENNACH(SEQUENZ(10;;0);ZUFALLSMATRIX(10)))))

Um "sicher zu gehen", kann man die Matrix ja auf 1000 Zeilen aufblasen und die ersten 100 Zeilen der mit EINDEUTIG() ermittelten Unikate ausgeben lassen.
=INDEX(EINDEUTIG(MATRIXERSTELLEN(1000;1;LAMBDA(x;y;TEXTKETTE(SORTIERENNACH(SEQUENZ(10;;0);ZUFALLSMATRIX(10))))));SEQUENZ(100))

Da müsste jetzt mal ein Mathematiker ran, der die Wahrscheinlichkeit einer Dublette in der ersten (kurzen) Formel ermittelt.

Ich habe es dann mal "hemdsärmelig" mittels VBA gemacht.
Die Anzahl der Dubletten liegt bei 1000 Matrizenerstellungen mit je 100 Zeilen bei 0 bis 2 (im Mittel 1,2)

Wer es nachstellen möchte:

Sub Dup_10er()
Dim i&, k&
For i = 1 To 1000
  If [COUNTA(UNIQUE(MAKEARRAY(100,1,LAMBDA(x,y,CONCAT(SORTBY(SEQUENCE(10,,0),RANDARRAY(10)))))))] < 100 Then
    k = k + 1
  End If
Next
Debug.Print k
End Sub

Gruß Ralf
Moin Ralf,

Du hast in beidem absolut recht, MTRANS ist nicht notwendig, und ZUFALLSMATRIX ohne ganze Zahlen auch.
Ich muss gestehen, ich hatte es jetzt so runtergeschrieben und dann nicht weiter über's Vereinfachen sinniert.

In meiner Soduko-Formel (schon fast ewig her) hatte ich auch ein Aufblähen verwendet, um die Eindeutigkeit
herzustellen. Da reichte die doppelte Anzahl an Einträgen bei insgesamt 9 Ziffern. Was jetzt besser und/oder
schneller ist (Aufblähen oder Rekursion) kann ich (auch) nicht beurteilen. 


Gruß
Zur Info, die Lösung von Ralf hat mir schon mehr als geholfen. 

=TEXTKETTE(SORTIERENNACH(SEQUENZ(10;;0);ZUFALLSMATRIX(10)))

Sie schließt zwar keine Dubletten unter den generierten Zahlen aus, aber nach einer Prüfung waren alle Zahlen dennoch einzigartig. Ich brauchte quasi nur dieses eine große Bündel an einzigartigen Zahlen.  Angel  
Hallo,

anbei ein allgemeiner Ansatz der eindeutige 10-stellige Zahlen ohne Ziffernwiederholung erzeugt.
Die Datei wird ohne jegliche Gewährleistung zur Verfügung gestellt, aber ich verwende einen aktuellen Virenscanner.

Viele Grüße,
Bernd