Я хочу создать случайную строку со случайной длиной из алфавита в 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 случайный символ от А1.
Хм. С 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))
Для генерации случайных строк
Заполните всю таблицу вниз в столбце A1
INDEX(B1:B10,RANDBETWEEN(1,10))