Quiero crear una cadena aleatoria con una longitud aleatoria del alfabeto en Excel. Por ejemplo, "jlskdjf", "kjlk", "kljsodif", etc. ¿Cómo puedo hacer eso?
Quiero crear una cadena aleatoria con una longitud aleatoria del alfabeto en Excel. Por ejemplo, "jlskdjf", "kjlk", "kljsodif", etc. ¿Cómo puedo hacer eso?
Respuestas:
Suponga que desea generar una cadena de longitud aleatoria (1-8 caracteres) a partir de alfabetos en 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 uno CHAR(...)
genera 1 alfabeto aleatorio en minúsculas.
Para usar alfabetos en mayúscula (AZ) en lugar de minúsculas, puede reemplazar CHAR(RAND()*26+97)
con CHAR(RAND()*26+65)
. Porque el código ASCII de AZ es 65-90, y el código ASCII de az es 97-122.
Simplemente la fórmula, se puede usar RANDBETWEEN()
de herramientas para análisis de reemplazar RAND()*xx+yy
.
Suponga que desea generar una cadena de longitud aleatoria (1-8 caracteres) a partir de caracteres específicos.
Puede ingresar los caracteres deseados en la celda A1 , por ejemplo:
abcdefghijklmnopqrstuvwxyz1234567890!@#$%^&*()
Entonces,
=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 uno MID(...)
obtiene 1 personaje aleatorio de A1.
Hmm Sería bastante fácil con VBA hacer una función para hacerlo. Con las fórmulas es un poco más complicado.
=CHAR(RANDBETWEEN(97,122))
obviamente te da una carta. Así que pon diez de esos en la columna A.=A1
celda B1.=B1&A2
B2 y complete B2: B10. (CONCATENAR no acepta rangos, molestamente).=OFFSET(B1,RANDBETWEEN(0,9),0)
.Puede haber una manera más fácil, con fórmulas de matriz o algo así.
Como fórmula para un solo personaje, puedes usar esto
=CHAR(RANDBETWEEN(97,122))
Simplemente busque en cualquier tabla ACSII para seleccionar el rango de rand deseado.
Pero la longitud aleatoria es complicada, no por la longitud aleatoria, sino por los caracteres aleatorios que desea unir. De lo contrario, podría simplemente combinar la función REPT con la función RAND y la fórmula anterior.
Pero para ajustarse al resultado descrito, usaría 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
Si hay una solución para hacer este código con fórmulas, por lo tanto, sin VBA, me gustaría saberlo :)
=LEFT(CHAR(RANDBETWEEN(97,122))&CHAR(RANDBETWEEN(97,122))&... repeat as many times as needed, RANDBETWEEN(minimum length, maximum length))
Esta fórmula no requiere una celda con "abc ... ABC ... 012"
Aleatorio 1 char de [a-zA-Z0-9].
=CHAR(CHOOSE(RANDBETWEEN(1,3),RANDBETWEEN(48,57),RANDBETWEEN(65,90),RANDBETWEEN(97,122)))
Si se necesitan más caracteres, copie CHAR (...) y sepárelos con &.
Esta solución es de Oaktree http://www.mrexcel.com/forum/excel-questions/332116-generate-random-alphanumeric-code.html
(Si desea cadenas de solo letras, vea el párrafo agregado a continuación)
Genere una cadena aleatoria de letras mayúsculas y dígitos de longitud aleatoria entre 8 y 12:
=MID(BASE(RAND()*10^18,36,12),1,RAND()*4+8)
Explicación:
BASE(RAND()*10^18,36,12)
. El truco es generar un gran número aleatorio y luego convertirlo a la base 36 obteniendo algo que efectivamente se parece a una cadena.RAND()*4+8
Funciones utilizadas en la fórmula (de adentro hacia afuera):
RAND()
Devuelve un número aleatorio entre 0 y 1.BASE(Number; Radix; [MinimumLength])
Convierte un entero positivo en una base especificada en un texto del sistema de numeración. Se utilizan los dígitos 0-9 y las letras AZ.MID("Text"; Start; Number)
Devuelve una cadena de texto de un texto. Los parámetros especifican la posición inicial y el número de caracteres.El número 10^18
es un número mágico para el que la cadena generada no tiene ceros iniciales o iniciales. Si necesita crear una cadena más larga, sugeriría crear dos o más cadenas y concatenarlas.
Nota: esta solución se probó en LibreOffice Calc 5, pero debería funcionar también en Microsoft Excel ya que las funciones son las mismas que en su documentación (que no puedo vincular porque no tengo suficiente reputación).
Como se señaló en un comentario que el OP solicitó específicamente solo cartas, lanzaré esta versión alternativa en:
=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)
donde sustituye todas las apariciones de dígitos a cadenas vacías. De esta forma solo obtienes letras (mayúsculas). He ajustado los números mágicos para contar la posibilidad de que la cadena aleatoria inicial tenga muchos dígitos. No es a prueba de fallas, aunque en el sentido de que, en principio, podría obtener cadenas que son más cortas de lo esperado.
Si necesita estar seguro de la longitud mínima, entonces tiene esta otra alternativa (aún más 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)
donde sustituye cada dígito con una letra mayúscula generada aleatoriamente.
Debo decir que lo que me gustó de la solución inicial con respecto a las proporcionadas en las otras respuestas es que es conciso y relativamente sencillo de entender. Las dos alternativas pierden estas propiedades.
Para generar caracteres aleatorios:
En la celda B1
= CHAR (RANDBETWEEN (48,131)) (o cualquier conjunto de caracteres que desee)
Complete esto con el número de columnas = caracteres máximos requeridos en su cadena
Para generar longitud aleatoria
En la celda A1
= IZQUIERDA (CONCATENAR (B1, C1, D1, E1, F1, G1, H1, I1, J1, K1), RANDBETWEEN (0,9))
Para generar cadenas aleatorias
Rellene toda la tabla en la columna A1
INDEX(B1:B10,RANDBETWEEN(1,10))