Como criar uma string aleatória de comprimento aleatório do alfabeto?

9

Eu quero criar uma string aleatória com comprimento aleatório do alfabeto no Excel. Por exemplo, "jlskdjf", "kjlk", "kljsodif", etc. Como posso fazer isso?

    
por Jenny Hoang 18.10.2012 / 11:05

7 respostas

11

Básico

Suponha que você queira gerar uma string de comprimento aleatório (1-8 caracteres) a partir de alfabetos minúsculos (a-z).

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

Cada CHAR(...) gera um alfabeto aleatório em minúsculas.

Para usar letras maiúsculas (A a Z) em vez de minúsculas, você pode substituir CHAR(RAND()*26+97) por CHAR(RAND()*26+65) . Porque o código ASCII de A-Z é 65-90 e o código ASCII de a-z é 97-122.

Para simplificar a fórmula, você pode usar RANDBETWEEN() de < a href="http://office.microsoft.com/en-gb/excel-help/load-the-analysis-toolpak-HP001127724.aspx"> Ferramentas de análise para substituir RAND()*xx+yy .

Avançado

Suponha que você queira gerar uma string de comprimento aleatório (1-8 caracteres) de caracteres específicos.

Você pode inserir os caracteres desejados na célula A1 , por exemplo:

abcdefghijklmnopqrstuvwxyz1234567890!@#$%^&*()

Então,

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

Cada MID(...) recebe 1 caractere aleatório de A1.

    
por 19.10.2012 / 09:39
4

Hmm. Seria muito fácil com o VBA fazer uma função para fazer isso. Com fórmulas, é um pouco mais envolvido.

  • =CHAR(RANDBETWEEN(97,122)) obviamente te dá uma letra. Então, coloque dez deles na coluna A.
  • Então, na próxima coluna, coloque =A1 na célula B1.
  • Coloque =B1&A2 em B2 e preencha B2: B10. (CONCATENATE não aceita intervalos, irritantemente.)
  • Na célula C2, coloque =OFFSET(B1,RANDBETWEEN(0,9),0) .

Pode haver uma maneira mais fácil, com fórmulas de matriz ou algo assim.

    
por 18.10.2012 / 12:04
2

Como uma fórmula para um único caractere, você poderia usar isso

=CHAR(RANDBETWEEN(97,122))

Basta procurar em qualquer Tabela ACSII para selecionar seu intervalo de rand desejado.

Mas o tamanho aleatório é complicado, não por causa do tamanho aleatório, mas por causa dos caracteres aleatórios que você deseja unir. Caso contrário, você poderia apenas a função REPT unida à função RAND e à fórmula acima.

Mas, para se adequar ao seu resultado descrito, eu usaria este código:

'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 houver uma solução para fazer esse código com fórmulas, portanto sem o VBA, eu gostaria muito de saber sobre ele:)

    
por 18.10.2012 / 12:14
1

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

    
por 19.10.2012 / 00:14
0

Esta fórmula não requer uma célula com "abc ... ABC ... 012"

Aleatório 1 char de [a-zA-Z0-9].

=CHAR(CHOOSE(RANDBETWEEN(1,3),RANDBETWEEN(48,57),RANDBETWEEN(65,90),RANDBETWEEN(97,122)))

Se mais caracteres forem necessários, copie CHAR (...) e separe-os com &

Esta solução é da Oaktree link

    
por 15.09.2015 / 02:58
0

(Se você quiser que as strings somente de letras vejam o parágrafo adicionado abaixo)

Gere uma sequência aleatória de letras maiúsculas e dígitos de tamanho aleatório entre 8 e 12: =MID(BASE(RAND()*10^18,36,12),1,RAND()*4+8)

Explicação:

  1. gera uma string aleatória de dígitos e letras maiúsculas, de tamanho mínimo 12: BASE(RAND()*10^18,36,12) . O truque é gerar um grande número aleatório e, em seguida, convertê-lo para a base 36, obtendo algo que efetivamente se pareça com uma string.
  2. gera um número aleatório entre 8 e 12, o comprimento da string RAND()*4+8
  3. pegue os caracteres da string como em (1) de 1 para o comprimento que você gerou em (2).

Funções usadas na fórmula (de dentro para fora):

  • RAND() Retorna um número aleatório entre 0 e 1.
  • %código% Converte um número inteiro positivo em uma base especificada em um texto do sistema de numeração. Os dígitos 0-9 e as letras A-Z são usados.
  • %código% Retorna uma string de texto de um texto. Os parâmetros especificam a posição inicial e o número de caracteres.

O número BASE(Number; Radix; [MinimumLength]) é um número mágico para o qual a string gerada não tem zeros à direita ou à esquerda. Se você precisar criar uma string mais longa, sugiro criar duas ou mais strings e concatená-las.

Nota: esta solução foi testada no LibreOffice Calc 5, mas deve funcionar também no Microsoft Excel, pois as funções são as mesmas da documentação (que não posso vincular porque não tenho reputação suficiente).

Resposta editada

Desde que foi apontado em um comentário que o OP especificamente pedia somente cartas, eu lançarei esta versão alternativa em: MID("Text"; Start; Number)

onde você substitui todas as ocorrências de dígitos por cadeias vazias. Desta forma você obtém apenas letras (maiúsculas). Eu ajustei os números mágicos para contar a possibilidade de que a string aleatória inicial tenha muitos dígitos. Não é à prova de falhas, embora no sentido de que, em princípio, você poderia obter cadeias de caracteres menores do que o esperado.

Se você precisa ter certeza do comprimento mínimo, então você tem essa alternativa (ainda mais complicada): 10^18

onde você substitui cada dígito por uma letra maiúscula gerada aleatoriamente.

Eu tenho que dizer que o que eu gostei da solução inicial em relação àquelas fornecidas nas outras respostas é que ela é concisa e relativamente simples de entender. As duas alternativas perdem essas propriedades.

    
por 17.01.2017 / 18:55
0

Para gerar caracteres aleatórios:

Na célula B1

= CHAR (RANDBETWEEN (48,131)) (ou qualquer conjunto de caracteres que você queira)

Preencha com o número de colunas = máximo de caracteres obrigatórios na sua string

Para gerar um tamanho aleatório

Na célula A1

= ESQUERDA (CONCATENAR (B1, C1, D1, E1, F1, G1, H1, I1, J1, K1), RANDBETWEEN (0,9))

Para gerar strings aleatórias

Preencha a tabela inteira na coluna A1

    
por 14.09.2018 / 12:29