Chcę utworzyć losowy ciąg o losowej długości z alfabetu w Excelu. Na przykład „jlskdjf”, „kjlk”, „kljsodif” itp. Jak to zrobić?
źródło
Chcę utworzyć losowy ciąg o losowej długości z alfabetu w Excelu. Na przykład „jlskdjf”, „kjlk”, „kljsodif” itp. Jak to zrobić?
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.
INDEX(B1:B10,RANDBETWEEN(1,10))
Jako wzór na pojedynczy znak możesz tego użyć
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:
Jeśli istnieje rozwiązanie do zrobienia tego kodu z formułami, a więc bez VBA, bardzo chciałbym o tym wiedzieć :)
źródło
=LEFT(CHAR(RANDBETWEEN(97,122))&CHAR(RANDBETWEEN(97,122))&... repeat as many times as needed, RANDBETWEEN(minimum length, maximum length))
źródło
Ta formuła nie wymaga komórki z „abc ... ABC ... 012”
Losowo 1 znak z [a-zA-Z0-9].
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
źródło
(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).
Edytowana odpowiedź
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.
źródło
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
źródło