Ich möchte eine zufällige Zeichenfolge mit zufälliger Länge aus dem Alphabet in Excel erstellen. Zum Beispiel "jlskdjf", "kjlk", "kljsodif" usw. Wie kann ich das tun?
Ich möchte eine zufällige Zeichenfolge mit zufälliger Länge aus dem Alphabet in Excel erstellen. Zum Beispiel "jlskdjf", "kjlk", "kljsodif" usw. Wie kann ich das tun?
Antworten:
Angenommen, Sie möchten eine Zeichenfolge mit zufälliger Länge (1-8 Zeichen) aus Kleinbuchstaben (az) generieren.
=LEFT( CHAR(RAND()*26+97) & CHAR(RAND()*26+97) &
CHAR(RAND()*26+97) & CHAR(RAND()*26+97) &
CHAR(RAND()*26+97) & CHAR(RAND()*26+97) &
CHAR(RAND()*26+97) & CHAR(RAND()*26+97),
RAND()*8+1)
Jedes CHAR(...)
generiert 1 zufälliges Kleinbuchstaben.
So verwenden Sie Großbuchstaben Alphabet (AZ) anstelle von Kleinbuchstaben, können Sie ersetzen CHAR(RAND()*26+97)
mit CHAR(RAND()*26+65)
. Weil der ASCII-Code von AZ 65-90 und der ASCII-Code von az 97-122 ist.
Um einfach die Formel, können Sie RANDBETWEEN()
von Analyse - Funktionen zu ersetzen RAND()*xx+yy
.
Angenommen, Sie möchten aus bestimmten Zeichen eine Zeichenfolge mit zufälliger Länge (1-8 Zeichen) generieren.
Sie können die gewünschten Zeichen in Zelle A1 eingeben , zum Beispiel:
abcdefghijklmnopqrstuvwxyz1234567890!@#$%^&*()
Dann,
=LEFT( MID($A$1,RAND()*LEN($A$1)+1,1) & MID($A$1,RAND()*LEN($A$1)+1,1) &
MID($A$1,RAND()*LEN($A$1)+1,1) & MID($A$1,RAND()*LEN($A$1)+1,1) &
MID($A$1,RAND()*LEN($A$1)+1,1) & MID($A$1,RAND()*LEN($A$1)+1,1) &
MID($A$1,RAND()*LEN($A$1)+1,1) & MID($A$1,RAND()*LEN($A$1)+1,1),
RAND()*8+1)
Jeder MID(...)
erhält 1 zufälliges Zeichen von A1.
Hmm. Mit VBA wäre es ziemlich einfach, eine Funktion dafür zu erstellen. Mit Formeln ist es etwas komplizierter.
=CHAR(RANDBETWEEN(97,122))
offensichtlich gibt Ihnen einen Brief. Setzen Sie also zehn davon in Spalte A.=A1
Zelle B1 ein.=B1&A2
B2 ein und füllen Sie B2: B10 aus. (CONCATENATE akzeptiert ärgerlicherweise keine Bereiche.)=OFFSET(B1,RANDBETWEEN(0,9),0)
.Es könnte einen einfacheren Weg geben, mit Array-Formeln oder so.
Als Formel für ein einzelnes Zeichen können Sie dies verwenden
=CHAR(RANDBETWEEN(97,122))
Schauen Sie einfach in eine beliebige ACSII-Tabelle, um den gewünschten Rand-Bereich auszuwählen.
Die zufällige Länge ist jedoch schwierig, nicht wegen der zufälligen Länge, sondern wegen der zufälligen Zeichen, die Sie zusammenstellen möchten. Andernfalls könnten Sie nur die REPT-Funktion mit der RAND-Funktion und der obigen Formel verknüpfen.
Aber um zu Ihrem beschriebenen Ergebnis zu passen, würde ich diesen Code verwenden:
'Put this into a VBA-Module, to be accessable as a worksheet function
Public Function RandomString() As String
Dim i As Long
Dim lngEnd As Long
Dim strResult As String
With Application.WorksheetFunction
lngEnd = .RandBetween(1, 20) 'String length 1-20 characters
strResult = ""
'create a random string of a random length between 1 and 20
For i = 1 To lngEnd
strResult = strResult & Chr(.RandBetween(97, 122))
Next i
End With
Debug.Print strResult
RandomString = strResult 'return the random string
End Function
Wenn es eine Lösung gibt, um diesen Code mit Formeln zu erstellen, daher ohne VBA, würde ich sehr gerne davon erfahren :)
=LEFT(CHAR(RANDBETWEEN(97,122))&CHAR(RANDBETWEEN(97,122))&... repeat as many times as needed, RANDBETWEEN(minimum length, maximum length))
Diese Formel erfordert keine Zelle mit "abc ... ABC ... 012"
Zufällige 1 Zeichen aus [a-zA-Z0-9].
=CHAR(CHOOSE(RANDBETWEEN(1,3),RANDBETWEEN(48,57),RANDBETWEEN(65,90),RANDBETWEEN(97,122)))
Wenn mehr Zeichen benötigt werden, kopieren Sie CHAR (...) und trennen Sie sie mit &.
Diese Lösung stammt von Oaktree http://www.mrexcel.com/forum/excel-questions/332116-generate-random-alphanumeric-code.html
(Wenn Sie nur Buchstabenfolgen wünschen, lesen Sie den hinzugefügten Absatz unten)
Generieren Sie eine zufällige Zeichenfolge aus Großbuchstaben und Ziffern mit zufälliger Länge zwischen 8 und 12:
=MID(BASE(RAND()*10^18,36,12),1,RAND()*4+8)
Erläuterung:
BASE(RAND()*10^18,36,12)
. Der Trick besteht darin, eine große Zufallszahl zu generieren und diese dann in Basis 36 umzuwandeln, um etwas zu erhalten, das effektiv wie eine Zeichenfolge aussieht.RAND()*4+8
In der Formel verwendete Funktionen (von innen nach außen):
RAND()
Gibt eine Zufallszahl zwischen 0 und 1 zurück.BASE(Number; Radix; [MinimumLength])
Konvertiert eine positive Ganzzahl in eine angegebene Basis in einen Text aus dem Nummerierungssystem. Die Ziffern 0-9 und die Buchstaben AZ werden verwendet.MID("Text"; Start; Number)
Gibt eine Textzeichenfolge eines Textes zurück. Die Parameter geben die Startposition und die Anzahl der Zeichen an.Die Zahl 10^18
ist eine magische Zahl, für die die generierte Zeichenfolge keine nachgestellten oder führenden Nullen enthält. Wenn Sie eine längere Zeichenfolge erstellen müssen, würde ich vorschlagen, zwei oder mehr solcher Zeichenfolgen zu erstellen und diese zu verketten.
Hinweis: Diese Lösung wurde auf LibreOffice Calc 5 getestet, sollte aber auch in Microsoft Excel funktionieren, da die Funktionen den Angaben in der Dokumentation entsprechen (die ich nicht verknüpfen kann, weil ich nicht genügend Reputation habe).
Da in einem Kommentar darauf hingewiesen wurde, dass das OP ausdrücklich nur um Briefe gebeten hat, werde ich diese alternative Version einwerfen in:
=MID(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(BASE(RAND()*10^22,36,16),"0",""),"1",""),"2",""),"3",""),"4",""),"5",""),"6",""),"7",""),"8",""),"9",""),1,RAND()*4+8)
Hier ersetzen Sie alle vorkommenden Ziffern durch leere Zeichenfolgen. Auf diese Weise erhalten Sie nur (Groß-) Buchstaben. Ich habe die magischen Zahlen angepasst, um die Möglichkeit zu berücksichtigen, dass die anfängliche zufällige Zeichenfolge viele Ziffern hat. Es ist nicht ausfallsicher, obwohl in dem Sinne, dass Sie im Prinzip Zeichenfolgen erhalten könnten, die kürzer als erwartet sind.
Wenn Sie sich über die Mindestlänge sicher sein müssen, haben Sie diese andere (noch kompliziertere) Alternative:
=MID(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(BASE(RAND()*10^22,36,16),"0",CHAR(RANDBETWEEN(65,90))),"1",CHAR(RANDBETWEEN(65,90))),"2",CHAR(RANDBETWEEN(65,90))),"3",CHAR(RANDBETWEEN(65,90))),"4",CHAR(RANDBETWEEN(65,90))),"5",CHAR(RANDBETWEEN(65,90))),"6",CHAR(RANDBETWEEN(65,90))),"7",CHAR(RANDBETWEEN(65,90))),"8",CHAR(RANDBETWEEN(65,90))),"9",CHAR(RANDBETWEEN(65,90))),1,RAND()*4+8)
Hier ersetzen Sie jede Ziffer durch einen zufällig generierten Großbuchstaben.
Ich muss sagen, dass mir an der ursprünglichen Lösung in Bezug auf die in den anderen Antworten angegebenen Lösungen gefallen hat, dass sie präzise und relativ einfach zu verstehen ist. Die beiden Alternativen verlieren diese Eigenschaften.
So generieren Sie zufällige Zeichen:
In Zelle B1
= CHAR (RANDBETWEEN (48,131)) (oder was auch immer Sie wollen)
Füllen Sie dies bis zur Anzahl der Spalten = maximal erforderliche Zeichen in Ihrer Zeichenfolge
Zufällige Länge erzeugen
In Zelle A1
= LINKS (KONKATENAT (B1, C1, D1, E1, F1, G1, H1, I1, J1, K1), RANDBETWEEN (0,9))
Zufällige Zeichenfolgen generieren
Füllen Sie die gesamte Tabelle in Spalte A1 aus
INDEX(B1:B10,RANDBETWEEN(1,10))