Fórmula do Excel: Gerar strings de texto aleatórias -

Fórmula genérica

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

Resumo

Para gerar uma lista de strings de texto aleatórias, você pode usar uma fórmula baseada em INDEX, RANDARRAY e TEXTJOIN. No exemplo mostrado, a fórmula em D5 é:

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

onde chars é o intervalo nomeado B5: B30 contendo as letras AZ. Conforme a fórmula é copiada na coluna, ela gera uma nova string de texto de 6 caracteres em cada linha.

Explicação

As novas fórmulas de matriz dinâmica no Excel 365 tornam muito mais fácil resolver certos problemas complicados com fórmulas.

Neste exemplo, o objetivo é gerar uma lista de códigos aleatórios de 6 caracteres. A aleatoriedade é tratada pela função RANDARRAY, uma nova função no Excel 365. RANDARRAY retorna 6 números aleatórios para INDEX, que então recupera 6 valores aleatórios do intervalo nomeado chars. Os resultados de INDEX são então concatenados com a função TEXTJOIN.

No exemplo mostrado, a fórmula em D5 é:

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

Trabalhando de dentro para fora, a função RANDARRAY é usada para gerar uma matriz contendo seis números aleatórios entre 1-26:

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

Observe que a matriz retornada varia com cada instância da função RANDARRAY. Além disso, como RANDARRAY é uma função volátil, ela será recalculada a cada alteração na planilha.

Esta matriz de números aleatórios é retornada diretamente para a função INDEX como o argumento de linhas:

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

Como estamos pedindo 6 linhas a INDEX, obtemos 6 resultados em uma matriz como esta:

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

Esta matriz é retornada à função TEXTJOIN como o argumento text1:

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

TEXTJOIN é definido para usar uma string vazia como delimitador e para ignorar os valores vazios. Com esta configuração, TEXJOIN simplesmente concatena todos os valores juntos e retorna uma string de texto de 6 caracteres como "NEUGYC".

Contar caracteres de maneira programática

Em vez de codificar o tamanho dos caracteres diretamente na função RANDARRAY, você pode usar a função CONT.valores para contar os elementos na matriz e retornar essa contagem para RANDARRAY:

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

Isso pressupõe que chars não contém células vazias.

Gerar caracteres programaticamente

Como as letras AZ têm valores de código numérico subjacentes, é possível gerar a matriz de caracteres usada para montar strings de texto programaticamente, em vez de usar um intervalo. Isso pode ser feito com a função CHAR e a função SEQUENCE.

Para gerar uma matriz com todas as letras maiúsculas de AZ, que mapeiam para ASCII 65-90:

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

Para gerar letras minúsculas az, que correspondem a ASCII 97-122:

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

Este código pode ser colocado na fórmula original para substituir "chars" como este:

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

Outros personagens

Os caracteres no intervalo nomeado chars podem ser o que você quiser. Se você adicionar mais de 26 caracteres (ou menos), ajuste o número 26 conforme apropriado ou use CONT.valores conforme explicado acima.

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

Nesta versão, RANDBETWEEN está retornando um valor entre 65 e 90 (inclusive) que corresponde ao valor ASCII para as letras AZ (maiúsculas). A função CHAR converte o valor numérico em uma letra. Como acima, todos os resultados são concatenados em uma única string de texto.

Artigos interessantes...