Formula di Excel: genera stringhe di testo casuali -

Sommario

Formula generica

=INDEX(characters,RANDARRAY(n,1,1,count,TRUE))

Sommario

Per generare un elenco di stringhe di testo casuali, puoi utilizzare una formula basata su INDICE, RANDARRAY e TEXTJOIN. Nell'esempio mostrato, la formula in D5 è:

=TEXTJOIN("",1,INDEX(chars,RANDARRAY(6,1,1,26,TRUE)))

dove chars è l'intervallo denominato B5: B30 contenente le lettere AZ. Quando la formula viene copiata lungo la colonna, genera una nuova stringa di testo di 6 caratteri su ogni riga.

Spiegazione

Le nuove formule di matrice dinamica in Excel 365 rendono molto più facile risolvere alcuni problemi complessi con le formule.

In questo esempio, l'obiettivo è generare un elenco di codici di 6 caratteri casuali. La casualità è gestita dalla funzione RANDARRAY, una nuova funzione in Excel 365. RANDARRAY restituisce 6 numeri casuali a INDICE, che quindi recupera 6 valori casuali dai caratteri dell'intervallo denominato. I risultati di INDEX vengono quindi concatenati insieme alla funzione TEXTJOIN.

Nell'esempio mostrato, la formula in D5 è:

=TEXTJOIN("",1,INDEX(chars,RANDARRAY(6,1,1,26,TRUE)))

Lavorando dall'interno verso l'esterno, la funzione RANDARRAY viene utilizzata per generare un array contenente sei numeri casuali tra 1-26:

RANDARRAY(6,1,1,26,TRUE) // return array like (14;5;21;7;25;3)

Notare che la matrice restituita varierà con ogni istanza della funzione RANDARRAY. Inoltre, poiché RANDARRAY è una funzione volatile, verrà ricalcolato con ogni modifica del foglio di lavoro.

Questa matrice di numeri casuali viene restituita direttamente alla funzione INDICE come argomento delle righe:

INDEX(chars,(14;5;21;7;25;3))

Poiché chiediamo INDICE per 6 righe, otteniamo 6 risultati in un array come questo:

("N","E","U","G","Y","C")

Questo array viene restituito alla funzione TEXTJOIN come argomento text1:

=TEXTJOIN("",1,("N","E","U","G","Y","C")) // returns "NEUGYC"

TEXTJOIN è impostato per utilizzare una stringa vuota come delimitatore e per ignorare i valori vuoti. Con questa configurazione, TEXJOIN concatena semplicemente tutti i valori insieme e restituisce una stringa di testo di 6 caratteri come "NEUGYC".

Contare i caratteri a livello di codice

Invece di codificare la dimensione dei caratteri direttamente nella funzione RANDARRAY, puoi usare la funzione COUNTA per contare gli elementi nell'array e restituire quel conteggio a RANDARRAY:

RANDARRAY(6,1,1,COUNTA(chars),TRUE)

Ciò presuppone che i caratteri non contengano celle vuote.

Genera caratteri a livello di codice

Poiché le lettere AZ hanno valori di codice numerico sottostanti, è possibile generare la matrice di caratteri utilizzata per assemblare le stringhe di testo a livello di codice, invece di utilizzare un intervallo. Questo può essere fatto con la funzione CHAR e la funzione SEQUENCE.

Per generare un array con tutte le lettere maiuscole AZ, che mappano ASCII 65-90:

=CHAR(SEQUENCE(26,1,65,1)) // returns ("A","B","C",… )

Per generare lettere minuscole az, che corrispondono ad ASCII 97-122:

=CHAR(SEQUENCE(26,1,97,1)) // returns ("a","b","c",… )

Questo codice può essere inserito nella formula originale per sostituire "chars" in questo modo:

=TEXTJOIN("",1,INDEX(CHAR(SEQUENCE(26,1,65,1)),RANDARRAY(6,1,1,26,TRUE)))

Altri caratteri

I caratteri nell'intervallo denominato caratteri possono essere qualcosa che ti piace. Se aggiungi più di 26 caratteri (o meno), regola il numero 26 in modo appropriato o utilizza COUNTA come spiegato sopra.

Senza Excel 365

It is possible to generate random text strings without Excel 365, but the formula is more tedious and redundant. Since we don't have a good way to get 6 random numbers all at once, we use the RANDBETWEEN function to get one random value at a time:

=INDEX(chars,RANDBETWEEN(1,26))& INDEX(chars,RANDBETWEEN(1,26))& INDEX(chars,RANDBETWEEN(1,26))& INDEX(chars,RANDBETWEEN(1,26))& INDEX(chars,RANDBETWEEN(1,26))& INDEX(chars,RANDBETWEEN(1,26))

This formula uses the INDEX function to retrieve one random value at a time from the named range chars, and the 6 results are concatenated together into a single text string. Line breaks added for readability.

It is also possible to generate values A-Z directly with CHAR and RANDBETWEEN like this:

=CHAR(RANDBETWEEN(65,90))& CHAR(RANDBETWEEN(65,90))& CHAR(RANDBETWEEN(65,90))& CHAR(RANDBETWEEN(65,90))& CHAR(RANDBETWEEN(65,90))& CHAR(RANDBETWEEN(65,90))

In questa versione, RANDBETWEEN restituisce un valore compreso tra 65 e 90 (inclusi) che corrisponde al valore ASCII per le lettere AZ (maiuscole). La funzione CHAR traduce il valore numerico in una lettera. Come sopra, tutti i risultati vengono concatenati insieme in una singola stringa di testo.

Articoli interessanti...