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.
Grüße
Philipp
Moin!
Mein Hobby!
:
| A | B | C |
1 | Stellen | 10 | 2.661.387.815 |
2 | versch_Zahlen | 15 | 4.598.504.004 |
3 | | | 2.170.735.435 |
4 | | | 1.447.823.002 |
5 | | | 1.551.592.975 |
6 | | | 8.632.648.134 |
7 | | | 4.959.961.786 |
8 | | | 7.312.922.270 |
9 | | | 8.399.318.970 |
10 | | | 6.882.453.177 |
11 | | | 6.382.104.123 |
12 | | | 3.738.586.121 |
13 | | | 2.191.529.614 |
14 | | | 1.746.090.941 |
15 | | | 6.355.075.818 |
16 | | | |
Zelle | Formel |
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 …
| E | F | G |
1 | min | 1000000000 | 8403049541 |
2 | max | 9999999999 | 9193602418 |
3 | versch_Zahlen | 15 | 2322962742 |
4 | | | 4174583588 |
5 | | | 1691089698 |
6 | | | 5809044349 |
7 | | | 2331777362 |
8 | | | 1827793007 |
9 | | | 7568250090 |
10 | | | 2717870713 |
11 | | | 6882879398 |
12 | | | 6656403743 |
13 | | | 2300048607 |
14 | | | 9527559743 |
15 | | | 7670548901 |
Zelle | Formel |
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 |
2 | 3278046159 |
3 | 0579628431 |
4 | 1365479820 |
5 | 4251793806 |
6 | 0673254891 |
7 | 7965032841 |
8 | 8457392016 |
9 | 1578049362 |
10 | 0279436158 |
11 | 1879240635 |
12 | 4568391027 |
13 | 5412683970 |
Zelle | Formel |
M2 | =TEXTKETTE(SORTIERENNACH(SEQUENZ(10;;0);ZUFALLSMATRIX(10))) |
Formel herunterziehen.
Fast, eine Voraussetzung ist (frag nicht warum
), 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.
Wow, gerade erst gesehen, danke Ralf!!! Diese Lösung ist viel besser!!
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.
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