Como criar uma sequência aleatória de tamanho aleatório a partir do alfabeto?


11

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

Respostas:


14

Basic

Suponha que você queira gerar uma sequência de comprimento aleatório (de 1 a 8 caracteres) a partir de alfabetos em minúsculas (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)

Cada um CHAR(...)gera 1 alfabeto minúsculo aleatório.

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

Para simplesmente a fórmula, você pode usar RANDBETWEEN()de ferramentas de análise para substituir RAND()*xx+yy.


Avançado

Suponha que você queira gerar uma sequência de comprimento aleatório (de 1 a 8 caracteres) a partir 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 um MID(...)recebe 1 caractere aleatório de A1.


4

Hmm. Seria muito fácil com o VBA criar uma função para fazê-lo. Com fórmulas é um pouco mais envolvido.

  • =CHAR(RANDBETWEEN(97,122))obviamente, dá-lhe uma letra. Então coloque dez deles na coluna A.
  • Em seguida, na próxima coluna, insira a =A1célula B1.
  • Coloque =B1&A2B2 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.


1
+1 - Eu sabia que deve haver uma maneira - no entanto, eu prefiro usar o índice em vez de DESVIO - comoINDEX(B1:B10,RANDBETWEEN(1,10))
Jook

2

Como fórmula para um único caractere, você pode usar este

=CHAR(RANDBETWEEN(97,122))

Basta procurar em qualquer tabela ACSII para selecionar o 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 montar. Caso contrário, você poderia apenas a função REPT associada à função RAND e à fórmula acima.

Mas, para ajustar o 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 isso :)


1

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


Um pouco mais de contexto sobre como isso funciona realmente melhoraria a resposta.
Burgi


0

(Se você deseja strings somente para letras, consulte o parágrafo adicionado abaixo)

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

Explicação:

  1. gerar uma seqüência aleatória de números e letras maiúsculas, de comprimento minimo 12: BASE(RAND()*10^18,36,12). O truque é gerar um grande número aleatório e convertê-lo na base 36, obtendo algo que efetivamente se parece com uma string.
  2. gerar 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 até 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.
  • BASE(Number; Radix; [MinimumLength]) 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 AZ são usadas.
  • MID("Text"; Start; Number) Retorna uma sequência de texto de um texto. Os parâmetros especificam a posição inicial e o número de caracteres.

O número 10^18é um número mágico para o qual a sequência gerada não possui zeros à direita ou à direita. Se você precisar criar uma string mais longa, sugiro criar duas ou mais dessas strings e concatená-las.

Nota: esta solução foi testada no LibreOffice Calc 5, mas também deve funcionar 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

Como foi apontado em um comentário que o OP solicitou especificamente apenas cartas, lançarei esta versão alternativa em: =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)

onde você substitui todas as ocorrências de dígitos por cadeias vazias. Dessa forma, você obtém apenas letras (maiúsculas). Ajustei os números mágicos para contar a possibilidade de que a sequência aleatória inicial tenha muitos dígitos. Não é à prova de falhas, embora no sentido de que, em princípio, você possa obter seqüências mais curtas do que o esperado.

Se você precisa ter certeza do tamanho mínimo, então você tem essa outra alternativa (ainda mais complicada): =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)

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

Devo dizer que o que gostei da solução inicial em relação às fornecidas nas outras respostas é que é conciso e relativamente simples de entender. As duas alternativas perdem essas propriedades.


O OP estava solicitando especificamente apenas caracteres do alfabeto. Você pode editar sua resposta para resolver isso?
music2myear

@ music2myear feito, mas dessa maneira você perde a concisão da versão original.
CristianCantoro

A concisão só é útil se atender às necessidades. Essa resposta, embora seja mais longa, é melhor porque, na verdade, responde à pergunta específica feita pelo OP.
Music2myear 19/01/19

0

Para gerar caracteres aleatórios:

Na célula B1

= CHAR (RANDBETWEEN (48.131)) (ou qualquer conjunto de caracteres que você desejar)

Preencha isso com o número de colunas = máximo de caracteres necessários em sua string

Para gerar comprimento aleatório

Na célula A1

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

Para gerar seqüências aleatórias

Preencha a tabela inteira na coluna A1

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.