Я хочу створити випадкову рядок із випадковою довжиною з алфавіту в Excel. Наприклад, "jlskdjf", "kjlk", "kljsodif" тощо. Як я можу це зробити?
Я хочу створити випадкову рядок із випадковою довжиною з алфавіту в Excel. Наприклад, "jlskdjf", "kjlk", "kljsodif" тощо. Як я можу це зробити?
Відповіді:
Припустимо, ви хочете генерувати випадкову довжину (1-8 символів) рядка з малих алфавітів (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)
Кожен CHAR(...)
генерує 1 випадковий нижній регістр алфавіту.
Щоб використовувати великі літери (AZ) замість малих літер, ви можете замінити їх CHAR(RAND()*26+97)
на CHAR(RAND()*26+65)
. Оскільки код ASCII AZ становить 65-90, а ASCII код az - 97-122.
Для того, щоб просто по формулі, ви можете використовувати RANDBETWEEN()
з пакета аналізу для заміни RAND()*xx+yy
.
Припустимо, ви хочете генерувати випадкову довжину (1-8 символів) рядка з конкретних символів.
Ви можете ввести потрібні символи в клітинку A1 , наприклад:
abcdefghijklmnopqrstuvwxyz1234567890!@#$%^&*()
Потім,
=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)
Кожен MID(...)
отримує 1 випадковий символ від A1.
Хм. З VBA було б досить легко зробити функцію, щоб це зробити. З формулами це трохи більше пов'язане.
=CHAR(RANDBETWEEN(97,122))
очевидно дає вам один лист. Тож покладіть десять із них у стовпчик А.=A1
у комірку B1.=B1&A2
B2 і заповніть B2: B10. (CONCATENATE не приймає діапазони, дратівливо.)=OFFSET(B1,RANDBETWEEN(0,9),0)
.Можливо, буде простіший спосіб, за допомогою формул масиву чи чогось іншого.
Як формулу для одного символу ви можете використовувати це
=CHAR(RANDBETWEEN(97,122))
Просто загляньте в будь-яку таблицю ACSII, щоб вибрати бажаний діапазон ренду.
Але випадкова довжина хитра, не через випадкову довжину, а через випадкові символи, які ви хочете скласти разом. В іншому випадку ви можете просто виконати функцію REPT, з'єднану з функцією RAND та формулою, наведеною вище.
Але, щоб відповідати описаному вами результату, я б використав цей код:
'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
Якщо є рішення зробити цей код за допомогою формул, отже, без VBA, я б дуже хотів про це знати :)
=LEFT(CHAR(RANDBETWEEN(97,122))&CHAR(RANDBETWEEN(97,122))&... repeat as many times as needed, RANDBETWEEN(minimum length, maximum length))
Ця формула не вимагає клітинки з "abc ... ABC ... 012"
Випадковий 1 знак від [a-zA-Z0-9].
=CHAR(CHOOSE(RANDBETWEEN(1,3),RANDBETWEEN(48,57),RANDBETWEEN(65,90),RANDBETWEEN(97,122)))
Якщо потрібно більше символів, скопіюйте CHAR (...) і розділіть їх за допомогою &.
Це рішення походить від Oaktree http://www.mrexcel.com/forum/excel-questions/332116-generate-random-alphanumeric-code.html
(Якщо ви хочете, щоб рядки лише для букв див. Доданий параграф нижче)
Створіть випадковий рядок з великих літер та цифр випадкової довжини між 8 і 12:
=MID(BASE(RAND()*10^18,36,12),1,RAND()*4+8)
Пояснення:
BASE(RAND()*10^18,36,12)
. Трюк - це генерувати велике випадкове число, а потім перетворювати його в базу 36, отримуючи щось, що ефективно виглядає як рядок.RAND()*4+8
Функції, що використовуються у формулі (зсередини назовні):
RAND()
Повертає випадкове число між 0 і 1.BASE(Number; Radix; [MinimumLength])
Перетворює додатне ціле число в задану базу в текст із системи нумерації. Використовуються цифри 0-9 та літери AZ.MID("Text"; Start; Number)
Повертає текстовий рядок тексту. Параметри задають початкове положення та кількість символів.Число 10^18
- це магічне число, для якого згенерована рядок не має кінцевих або провідних нулів. Якщо вам потрібно створити довший рядок, я б запропонував створити два або більше таких рядків і об'єднати їх.
Зауважте: це рішення було протестовано на LibreOffice Calc 5, але воно повинно працювати і в Microsoft Excel, оскільки функції такі ж, як і в їх документації (з якою я не можу зв’язатись, оскільки у мене недостатньо репутації).
Оскільки в коментарі було зазначено, що ОП спеціально просила лише листи, я перекину цю альтернативну версію:
=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)
де ви замінюєте всі виникнення цифр порожніми рядками. Таким чином ви отримуєте лише (великі) літери. Я налаштував магічні числа, щоб порахувати можливість того, що початковий випадковий рядок має багато цифр. Це небезпечно, хоча в тому сенсі, що в принципі ви могли отримати рядки, коротші, ніж очікувалося.
Якщо вам потрібно бути впевненим у мінімальній довжині, у вас є ще одна (ще більш складна) альтернатива:
=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)
де ви замінюєте кожну цифру випадково сформованою великою літерою.
Я мушу сказати, що те, що мені сподобалося в початковому рішенні стосовно тих, що наведені в інших відповідях, - це те, що це стисло і порівняно просто. Дві альтернативи втрачають ці властивості.
Для генерації випадкових символів:
У комірці B1
= CHAR (RANDBETWEEN (48,131)) (або будь-який інший набір символів)
Заповніть це на кількість стовпців = максимально необхідні символи у рядку
Для генерації випадкової довжини
У комірці А1
= ЛІВО (КОНЦАТЕНТ (B1, C1, D1, E1, F1, G1, H1, I1, J1, K1), РЯДНИК (0,9))
Для генерації випадкових рядків
Заповніть всю таблицю в стовпчик А1
INDEX(B1:B10,RANDBETWEEN(1,10))