Voglio creare una stringa casuale con lunghezza casuale dall'alfabeto in Excel. Ad esempio, "jlskdjf", "kjlk", "kljsodif", ecc. Come posso farlo?
Voglio creare una stringa casuale con lunghezza casuale dall'alfabeto in Excel. Ad esempio, "jlskdjf", "kjlk", "kljsodif", ecc. Come posso farlo?
Risposte:
Supponiamo di voler generare una stringa di lunghezza casuale (1-8 caratteri) da alfabeti minuscoli (az).
=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)
Ciascuno CHAR(...)
genera 1 alfabeto casuale minuscolo.
Per utilizzare alfabeti maiuscoli (AZ) anziché minuscoli, è possibile sostituire CHAR(RAND()*26+97)
con CHAR(RAND()*26+65)
. Poiché il codice ASCII di AZ è 65-90 e il codice ASCII di az è 97-122.
Per semplicemente la formula, è possibile utilizzare RANDBETWEEN()
degli strumenti di analisi per sostituire RAND()*xx+yy
.
Supponiamo di voler generare una stringa di lunghezza casuale (1-8 caratteri) da caratteri specifici.
È possibile inserire i caratteri desiderati nella cella A1 , ad esempio:
abcdefghijklmnopqrstuvwxyz1234567890!@#$%^&*()
Poi,
=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)
Ognuno MID(...)
prende 1 carattere casuale da A1.
Hmm. Sarebbe abbastanza facile con VBA creare una funzione per farlo. Con le formule è un po 'più coinvolto.
=CHAR(RANDBETWEEN(97,122))
ovviamente ti dà una lettera. Quindi metti dieci di quelli nella colonna A.=A1
cella B1.=B1&A2
B2 e compila B2: B10. (CONCATENATE non accetta i range, in modo fastidioso.)=OFFSET(B1,RANDBETWEEN(0,9),0)
.Potrebbe esserci un modo più semplice, con formule di array o qualcosa del genere.
Come formula per un singolo personaggio potresti usarlo
=CHAR(RANDBETWEEN(97,122))
Basta guardare in qualsiasi tabella ACSII per selezionare l'intervallo rand desiderato.
Ma la lunghezza casuale è difficile, non a causa della lunghezza casuale, ma a causa dei personaggi casuali che vuoi mettere insieme. Altrimenti, potresti solo la funzione REPT unita alla funzione RAND e alla formula sopra.
Ma per adattare il risultato descritto, utilizzerei questo codice:
'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
Se esiste una soluzione per eseguire questo codice con le formule, quindi senza VBA, mi piacerebbe molto saperlo :)
=LEFT(CHAR(RANDBETWEEN(97,122))&CHAR(RANDBETWEEN(97,122))&... repeat as many times as needed, RANDBETWEEN(minimum length, maximum length))
Questa formula non richiede una cella con "abc ... ABC ... 012"
1 carattere casuale da [a-zA-Z0-9].
=CHAR(CHOOSE(RANDBETWEEN(1,3),RANDBETWEEN(48,57),RANDBETWEEN(65,90),RANDBETWEEN(97,122)))
Se sono necessari più caratteri, copiare CHAR (...) e separarli con &.
Questa soluzione è tratta da Oaktree http://www.mrexcel.com/forum/excel-questions/332116-generate-random-alphanumeric-code.html
(Se vuoi stringhe di sole lettere vedi il paragrafo aggiunto sotto)
Genera una stringa casuale di lettere maiuscole e cifre di lunghezza casuale compresa tra 8 e 12:
=MID(BASE(RAND()*10^18,36,12),1,RAND()*4+8)
Spiegazione:
BASE(RAND()*10^18,36,12)
. Il trucco sta generando un grande numero casuale e poi convertendolo in base 36 ottenendo qualcosa che effettivamente assomiglia a una stringa.RAND()*4+8
Funzioni utilizzate nella formula (al rovescio):
RAND()
Restituisce un numero casuale compreso tra 0 e 1.BASE(Number; Radix; [MinimumLength])
Converte un numero intero positivo in una base specificata in un testo dal sistema di numerazione. Vengono utilizzate le cifre 0-9 e le lettere AZ.MID("Text"; Start; Number)
Restituisce una stringa di testo di un testo. I parametri specificano la posizione iniziale e il numero di caratteri.Il numero 10^18
è un numero magico per il quale la stringa generata non ha zero finali o iniziali. Se è necessario creare una stringa più lunga, suggerirei di creare due o più stringhe e concatenarle.
Nota: questa soluzione è stata testata su LibreOffice Calc 5, ma dovrebbe funzionare anche in Microsoft Excel poiché le funzioni sono le stesse della loro documentazione (che non posso collegare perché non ho abbastanza reputazione).
Dal momento che è stato sottolineato in un commento che l'OP ha specificamente richiesto solo lettere, inserirò questa versione alternativa 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)
dove sostituisci tutte le occorrenze di cifre in stringhe vuote. In questo modo si ottengono solo lettere (maiuscole). Ho modificato i numeri magici per contare la possibilità che la stringa casuale iniziale abbia molte cifre. Non è sicuro, anche se in linea di principio è possibile ottenere stringhe più brevi del previsto.
Se devi essere sicuro della lunghezza minima, hai questa altra alternativa (ancora più complicata):
=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)
dove sostituisci ogni cifra con una lettera maiuscola generata casualmente.
Devo dire che ciò che mi è piaciuto della soluzione iniziale rispetto a quelle fornite nelle altre risposte è che è conciso e relativamente semplice da capire. Le due alternative perdono queste proprietà.
Per generare caratteri casuali:
Nella cella B1
= CHAR (RANDBETWEEN (48.131)) (o qualunque set di caratteri desiderato)
Riempilo con il numero di colonne = numero massimo di caratteri richiesti nella stringa
Per generare una lunghezza casuale
Nella cella A1
= SINISTRA (CONCATENA (B1, C1, D1, E1, F1, G1, H1, I1, J1, K1), RANDBETWEEN (0,9))
Per generare stringhe casuali
Riempi l'intera tabella verso il basso nella colonna A1
INDEX(B1:B10,RANDBETWEEN(1,10))