Как создать случайную строку произвольной длины из алфавита?

Я хочу создать случайную строку со случайной длиной из алфавита в Excel. Например, "jlskdjf", "kjlk", "kljsodif" и т. Д. Как я могу это сделать?

9 ответов

Решение

основной

Предположим, вы хотите сгенерировать строку произвольной длины (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() анализа Toolpak для замены 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 не принимает диапазоны, досадно.)
  • В ячейку С2 положите =OFFSET(B1,RANDBETWEEN(0,9),0),

Там может быть более простой способ, с формулами массива или что-то.

Эта формула не требует ячейки с "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

В качестве формулы для одного символа вы можете использовать это

=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, я бы очень хотел узнать об этом:)

Попробуй это

=CONCAT(IF({1,2,3,4,5,6,7,8},MID("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",RANDBETWEEN.NV(1,62),1),), -RANDBETWEEN.NV(111111111, 999999999))

Я тестировал его до 5 тыс. + строк

=LEFT(CHAR(RANDBETWEEN(97,122))&CHAR(RANDBETWEEN(97,122))&... repeat as many times as needed, RANDBETWEEN(minimum length, maximum length))

      =TEXTJOIN(,,CHAR(RANDARRAY(1,RANDBETWEEN(1,10),65,90,TRUE)))

Это более современный ответ. RANDARRAY возвращает массив случайных чисел. Вы можете указать количество строк или столбцов в массиве, а также минимальное и максимальное значения (которые я установил на 65 и 90 для представления A и Z).

  1. Я использую RANDBETWEEN для генерации случайной «длины» или ширины столбцов, которую я установил на 10.
  2. Я использую CHAR для возврата буквенно-цифрового значения для значений от 65 до 90)
  3. Я использую Textjoin для объединения массива.

Вероятно, есть другие решения. Новые формулы просто потрясающие.

Для генерации случайных символов:

В ячейке B1

= CHAR (RANDBETWEEN (48,131)) (или любой другой набор символов, который вы хотите)

Заполните это до количества столбцов = максимально необходимых символов в вашей строке

Для генерации случайной длины

В ячейке А1

= ЛЕВЫЙ (СЦЕПИТЬ (B1,C1,D1,E1,F1,G1,H1,I1,J1,K1), СЛУЧМЕЖДУ (0,9))

Для генерации случайных строк

Заполните всю таблицу вниз в столбце A1

(Если вам нужны только буквы, смотрите добавленный абзац ниже)

Создайте случайную строку из заглавных букв и цифр случайной длины от 8 до 12: =MID(BASE(RAND()*10^18,36,12),1,RAND()*4+8)

Объяснение:

  1. генерировать случайную строку цифр и заглавных букв, минимальной длины 12: BASE(RAND()*10^18,36,12), Хитрость заключается в генерации большого случайного числа, а затем преобразовании его в базу 36 с получением чего-то, что эффективно выглядит как строка.
  2. генерировать случайное число от 8 до 12, длина строки RAND()*4+8
  3. Возьмите символы строки, как в (1), от 1 до длины, которую вы сгенерировали в (2).

Функции, используемые в формуле (наизнанку):

  • 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)

где вы заменяете каждую цифру случайно сгенерированной заглавной буквой.

Я должен сказать, что мне понравилось первоначальное решение по сравнению с теми, которые приведены в других ответах, - это то, что оно краткое и относительно простое для понимания. Две альтернативы теряют эти свойства.

Другие вопросы по тегам