Wie erstelle ich eine zufällige Zeichenfolge mit zufälliger Länge aus dem Alphabet?

11

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?

Jenny Hoang
quelle

Antworten:

13

Basic

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.


Erweitert

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.

Wilson
quelle
4

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.
  • Geben Sie dann in der nächsten Spalte =A1Zelle B1 ein.
  • Geben Sie =B1&A2B2 ein und füllen Sie B2: B10 aus. (CONCATENATE akzeptiert ärgerlicherweise keine Bereiche.)
  • In Zelle C2 setzen =OFFSET(B1,RANDBETWEEN(0,9),0).

Es könnte einen einfacheren Weg geben, mit Array-Formeln oder so.

Benshepherd
quelle
1
+1 - Ich wusste, dass es einen Weg geben sollte - ich würde jedoch lieber INDEX anstelle von OFFSET verwenden - wieINDEX(B1:B10,RANDBETWEEN(1,10))
Jook
2

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 :)

Witz
quelle
1

=LEFT(CHAR(RANDBETWEEN(97,122))&CHAR(RANDBETWEEN(97,122))&... repeat as many times as needed, RANDBETWEEN(minimum length, maximum length))

Mike Fitzpatrick
quelle
Ein wenig mehr Kontext darüber, wie dies funktioniert, würde die Antwort wirklich verbessern.
Burgi
0

(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:

  1. Generieren Sie eine zufällige Folge von Ziffern und Großbuchstaben mit einer Mindestlänge von 12 : 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.
  2. Generieren Sie eine Zufallszahl zwischen 8 und 12, der Stringlänge RAND()*4+8
  3. Nehmen Sie die Zeichen der Zeichenfolge wie in (1) von 1 bis zu der Länge, die Sie in (2) generiert haben.

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^18ist 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).

Antwort bearbeitet

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.

CristianCantoro
quelle
OP fragte speziell nur nach Alphabetzeichen. Können Sie Ihre Antwort bearbeiten, um dies zu beheben?
music2myear
@ music2myear fertig, aber auf diese Weise verlieren Sie die Prägnanz der Originalversion.
CristianCantoro
Prägnanz ist nur dann nützlich, wenn sie den Anforderungen entspricht. Diese Antwort ist zwar länger, aber besser, da sie tatsächlich die spezifische Frage beantwortet, die OP gestellt hat.
music2myear
0

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

JamieG
quelle