Je veux créer une chaîne aléatoire avec une longueur aléatoire à partir de l'alphabet dans Excel. Par exemple, "jlskdjf", "kjlk", "kljsodif", etc. Comment puis-je faire cela?
Je veux créer une chaîne aléatoire avec une longueur aléatoire à partir de l'alphabet dans Excel. Par exemple, "jlskdjf", "kjlk", "kljsodif", etc. Comment puis-je faire cela?
Réponses:
Supposons que vous souhaitez générer une chaîne de longueur aléatoire (1 à 8 caractères) à partir d'alphabets en minuscules (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)
Chacun CHAR(...)
génère 1 alphabet minuscule aléatoire.
Pour utiliser des alphabets majuscules (AZ) au lieu de minuscules, vous pouvez remplacer CHAR(RAND()*26+97)
par CHAR(RAND()*26+65)
. Parce que le code ASCII de AZ est 65-90 et le code ASCII de az est 97-122.
Pour simplement la formule, vous pouvez utiliser RANDBETWEEN()
d' utilitaire d' analyse pour remplacer RAND()*xx+yy
.
Supposons que vous souhaitiez générer une chaîne de longueur aléatoire (1 à 8 caractères) à partir de caractères spécifiques.
Vous pouvez saisir les caractères souhaités dans la cellule A1 , par exemple:
abcdefghijklmnopqrstuvwxyz1234567890!@#$%^&*()
Ensuite,
=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)
Chacun MID(...)
obtient 1 caractère aléatoire de A1.
Hmm. Il serait assez facile avec VBA de créer une fonction pour le faire. Avec les formules, c'est un peu plus compliqué.
=CHAR(RANDBETWEEN(97,122))
vous donne évidemment une lettre. Alors mettez-en dix dans la colonne A.=A1
cellule B1.=B1&A2
B2 et remplissez B2: B10. (CONCATENATE n'accepte pas les plages, de manière ennuyeuse.)=OFFSET(B1,RANDBETWEEN(0,9),0)
.Il pourrait y avoir un moyen plus simple, avec des formules matricielles ou quelque chose.
Comme formule pour un seul caractère, vous pouvez utiliser ceci
=CHAR(RANDBETWEEN(97,122))
Il suffit de regarder dans n'importe quel tableau ACSII pour sélectionner la gamme de rand souhaitée.
Mais la longueur aléatoire est délicate, non pas à cause de la longueur aléatoire, mais à cause des caractères aléatoires que vous souhaitez assembler. Sinon, vous pourriez simplement la fonction REPT jointe à la fonction RAND et la formule ci-dessus.
Mais pour adapter le résultat décrit, j'utiliserais ce code:
'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
S'il y a une solution pour faire ce code avec des formules, donc sans VBA, j'aimerais beaucoup le savoir :)
=LEFT(CHAR(RANDBETWEEN(97,122))&CHAR(RANDBETWEEN(97,122))&... repeat as many times as needed, RANDBETWEEN(minimum length, maximum length))
Cette formule ne nécessite pas de cellule avec "abc ... ABC ... 012"
1 caractère aléatoire de [a-zA-Z0-9].
=CHAR(CHOOSE(RANDBETWEEN(1,3),RANDBETWEEN(48,57),RANDBETWEEN(65,90),RANDBETWEEN(97,122)))
Si plus de caractères sont nécessaires, copiez CHAR (...) et séparez-les avec &.
Cette solution provient d'Oaktree http://www.mrexcel.com/forum/excel-questions/332116-generate-random-alphanumeric-code.html
(Si vous voulez des chaînes de lettres uniquement, voir le paragraphe ajouté ci-dessous)
Générez une chaîne aléatoire de lettres majuscules et de chiffres de longueur aléatoire entre 8 et 12:
=MID(BASE(RAND()*10^18,36,12),1,RAND()*4+8)
Explication:
BASE(RAND()*10^18,36,12)
. L'astuce consiste à générer un grand nombre aléatoire puis à le convertir en base 36 pour obtenir quelque chose qui ressemble effectivement à une chaîne.RAND()*4+8
Fonctions utilisées dans la formule (à l'envers):
RAND()
Renvoie un nombre aléatoire compris entre 0 et 1.BASE(Number; Radix; [MinimumLength])
Convertit un entier positif en une base spécifiée en un texte du système de numérotation. Les chiffres 0-9 et les lettres AZ sont utilisés.MID("Text"; Start; Number)
Renvoie une chaîne de texte d'un texte. Les paramètres spécifient la position de départ et le nombre de caractères.Le nombre 10^18
est un nombre magique pour lequel la chaîne générée n'a pas de zéros de fin ou de début. Si vous avez besoin de créer une chaîne plus longue, je suggère de créer deux ou plusieurs de ces chaînes et de les concaténer.
Remarque: cette solution a été testée sur LibreOffice Calc 5, mais elle devrait également fonctionner dans Microsoft Excel car les fonctions sont les mêmes que dans leur documentation (que je ne peux pas lier car je n'ai pas assez de réputation).
Puisqu'il a été souligné dans un commentaire que le PO ne demandait spécifiquement que des lettres, je jetterai cette version alternative dans:
=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)
où vous remplacez toutes les occurrences de chiffres par des chaînes vides. De cette façon, vous obtenez uniquement des lettres (majuscules). J'ai modifié les nombres magiques pour tenir compte de la possibilité que la chaîne aléatoire initiale ait plusieurs chiffres. Ce n'est pas sûr, mais dans le sens où vous pouvez en principe obtenir des chaînes plus courtes que prévu.
Si vous devez être sûr de la longueur minimale, vous avez cette autre alternative (encore plus compliquée):
=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)
où vous remplacez chaque chiffre par une lettre majuscule générée aléatoirement.
Je dois dire que ce que j'ai aimé de la solution initiale par rapport à celles fournies dans les autres réponses, c'est qu'elle est concise et relativement simple à comprendre. Les deux alternatives perdent ces propriétés.
Pour générer des caractères aléatoires:
Dans la cellule B1
= CHAR (RANDBETWEEN (48,131)) (ou n'importe quel jeu de caractères que vous voulez)
Remplissez-le jusqu'au nombre de colonnes = caractères maximum requis dans votre chaîne
Pour générer une longueur aléatoire
Dans la cellule A1
= GAUCHE (CONCATENÉ (B1, C1, D1, E1, F1, G1, H1, I1, J1, K1), RANDBETWEEN (0,9))
Pour générer des chaînes aléatoires
Remplissez le tableau dans la colonne A1
INDEX(B1:B10,RANDBETWEEN(1,10))