Chcę utworzyć losowy ciąg o losowej długości z alfabetu w Excelu. Na przykład „jlskdjf”, „kjlk”, „kljsodif” itp. Jak to zrobić?
Chcę utworzyć losowy ciąg o losowej długości z alfabetu w Excelu. Na przykład „jlskdjf”, „kjlk”, „kljsodif” itp. Jak to zrobić?
Odpowiedzi:
Załóżmy, że chcesz wygenerować ciąg o losowej długości (1-8 znaków) z małych liter (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)
Każdy CHAR(...)
generuje 1 losowy alfabet.
Aby korzystać z górnych alfabetów przypadku (AZ) zamiast małych liter, można zastąpić CHAR(RAND()*26+97)
z CHAR(RAND()*26+65)
. Ponieważ kod ASCII dla AZ to 65-90, a kod ASCII dla az to 97-122.
Po prostu wzoru, można skorzystać RANDBETWEEN()
z Analysis ToolPak zastąpić RAND()*xx+yy
.
Załóżmy, że chcesz wygenerować ciąg losowy (1-8 znaków) z określonych znaków.
Możesz wprowadzić żądane znaki w komórce A1 , na przykład:
abcdefghijklmnopqrstuvwxyz1234567890!@#$%^&*()
Następnie,
=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)
Każdy MID(...)
otrzymuje 1 losową postać z A1.
Hmm Z VBA byłoby łatwo stworzyć funkcję, która by to zrobiła. W przypadku formuł jest to nieco bardziej zaangażowane.
=CHAR(RANDBETWEEN(97,122))
oczywiście daje jedną literę. Więc umieść dziesięć z nich w kolumnie A.=A1
komórkę B1.=B1&A2
B2 i wypełnij B2: B10. (CONCATENATE nie akceptuje zakresów, irytujące).=OFFSET(B1,RANDBETWEEN(0,9),0)
.Może być łatwiejszy sposób, używając formuł tablicowych lub czegoś takiego.
Jako wzór na pojedynczy znak możesz tego użyć
=CHAR(RANDBETWEEN(97,122))
Wystarczy zajrzeć do dowolnej tabeli ACSII, aby wybrać żądany zakres rand.
Ale losowa długość jest trudna, nie ze względu na losową długość, ale ze względu na losowe postacie, które chcesz połączyć. W przeciwnym razie możesz po prostu funkcję REPT połączoną z funkcją RAND i powyższą formułą.
Ale aby dopasować się do opisanego wyniku, użyłbym tego kodu:
'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
Jeśli istnieje rozwiązanie do zrobienia tego kodu z formułami, a więc bez VBA, bardzo chciałbym o tym wiedzieć :)
=LEFT(CHAR(RANDBETWEEN(97,122))&CHAR(RANDBETWEEN(97,122))&... repeat as many times as needed, RANDBETWEEN(minimum length, maximum length))
Ta formuła nie wymaga komórki z „abc ... ABC ... 012”
Losowo 1 znak z [a-zA-Z0-9].
=CHAR(CHOOSE(RANDBETWEEN(1,3),RANDBETWEEN(48,57),RANDBETWEEN(65,90),RANDBETWEEN(97,122)))
Jeśli potrzebujesz więcej znaków, skopiuj CHAR (...) i oddziel je znakiem &.
To rozwiązanie pochodzi od Oaktree http://www.mrexcel.com/forum/excel-questions/332116-generate-random-alphanumeric-code.html
(Jeśli chcesz ciągów zawierających tylko litery, zobacz dodany akapit poniżej)
Wygeneruj losowy ciąg wielkich liter i cyfr o losowej długości od 8 do 12:
=MID(BASE(RAND()*10^18,36,12),1,RAND()*4+8)
Wyjaśnienie:
BASE(RAND()*10^18,36,12)
. Sztuczka polega na wygenerowaniu dużej liczby losowej, a następnie przekształceniu jej w bazę 36, uzyskując coś, co faktycznie wygląda jak łańcuch.RAND()*4+8
Funkcje użyte w formule (na lewą stronę):
RAND()
Zwraca liczbę losową z przedziału od 0 do 1.BASE(Number; Radix; [MinimumLength])
Konwertuje dodatnią liczbę całkowitą na określoną bazę na tekst z systemu numeracji. Używane są cyfry 0–9 i litery AZ.MID("Text"; Start; Number)
Zwraca ciąg tekstowy tekstu. Parametry określają pozycję początkową i liczbę znaków.Liczba 10^18
jest liczbą magiczną, dla której generowany ciąg nie ma zer ani wiodących zer. Jeśli chcesz utworzyć dłuższy ciąg, sugerowałbym utworzenie dwóch lub więcej takich ciągów i połączenie ich.
Uwaga: to rozwiązanie zostało przetestowane na LibreOffice Calc 5, ale powinno działać również w Microsoft Excel, ponieważ funkcje są takie same jak w ich dokumentacji (których nie mogę połączyć, ponieważ nie mam wystarczającej reputacji).
Ponieważ w komentarzu wskazano, że OP konkretnie poprosił tylko o litery, wrzucę tę alternatywną wersję do:
=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)
gdzie podstawisz wszystkie wystąpienia cyfr na puste ciągi. W ten sposób otrzymujesz tylko (wielkie) litery. Poprawiłem magiczne liczby, aby liczyć na to, że początkowy losowy ciąg ma wiele cyfr. Nie jest bezpieczny, ale w tym sensie, że w zasadzie można uzyskać ciągi krótsze niż oczekiwano.
Jeśli chcesz mieć pewność co do minimalnej długości, masz inną (jeszcze bardziej skomplikowaną) alternatywę:
=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)
gdzie podstawiasz każdą cyfrę losowo generowaną wielką literą.
Muszę powiedzieć, że to, co mi się podobało z pierwotnego rozwiązania w stosunku do tych podanych w innych odpowiedziach, to zwięzłe i stosunkowo proste do zrozumienia. Dwie alternatywy tracą te właściwości.
Aby wygenerować losowe znaki:
W komórce B1
= CHAR (RANDBETWEEN (48,131)) (lub dowolny inny zestaw znaków, jaki chcesz)
Wypełnij to liczbą kolumn = maksymalna wymagana liczba znaków w ciągu
Aby wygenerować losową długość
W komórce A1
= LEWY (POŁĄCZENIE (B1, C1, D1, E1, F1, G1, H1, I1, J1, K1), RANDBETWEEN (0,9))
Aby wygenerować losowe ciągi
Wypełnij całą tabelę w dół w kolumnie A1
INDEX(B1:B10,RANDBETWEEN(1,10))