Генератор случайных слов Excel - PullRequest
0 голосов
/ 13 июня 2018

Мне нужна помощь в создании генератора случайных имен из 3 букв.

Например, K, H, F.

Каждое из этих имен должно содержать три "K", два "H "и один" F ".

Кто-нибудь знает?

Большое спасибо за вашу помощь!

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Вот хитрый способ:

В диапазоне A1:A6 поместите формулу =RAND() и поместите ваши буквы в B1:B6.

В другую ячейку поместите формулу:

=CONCATENATE(VLOOKUP(SMALL(A1:A6,1),A1:B6,2,FALSE),VLOOKUP(SMALL(A1:A6,2),A1:B6,2,FALSE),VLOOKUP(SMALL(A1:A6,3),A1:B6,2,FALSE),VLOOKUP(SMALL(A1:A6,4),A1:B6,2,FALSE),VLOOKUP(SMALL(A1:A6,5),A1:B6,2,FALSE),VLOOKUP(SMALL(A1:A6,6),A1:B6,2,FALSE))

Работает так:

enter image description here

0 голосов
/ 13 июня 2018

Вот функция, которую вы можете поместить в модуль:

Public Function Random(RLength As Integer) As String

On Error GoTo Err_Random

    Dim strTemp As String
    Dim intLoop As Integer
    Dim strCharBase As String
    Dim intPos As Integer
    Dim intLen As Integer

Startover:
    Random = ""
    strCharBase = "KHF"
    intLen = Len(strCharBase)
    strTemp = String(RLength, "A")
    Rnd -1
    Randomize (Timer)
    For intLoop = 1 To Len(strTemp)
        intPos = CInt(Rnd() * intLen + 1)
        If intPos > intLen Then intPos = intPos - 1
        Mid$(strTemp, intLoop, 1) = Mid$(strCharBase, intPos, 1)
    Next
    Random = strTemp
    If (Len(Random) - Len(Replace(Random, "K", ""))) / Len("K") <> 3 Then GoTo Startover
    If (Len(Random) - Len(Replace(Random, "H", ""))) / Len("H") <> 2 Then GoTo Startover
    If (Len(Random) - Len(Replace(Random, "F", ""))) / Len("F") <> 1 Then GoTo Startover

Exit_Random:
    On Error Resume Next
    Exit Function

Err_Random:
    MsgBox Err.Number & " " & Err.Description, vbCritical, "Random"
    Random = ""
    Resume Exit_Random

End Function

Вызовите функцию на вашем листе следующим образом:

=Random(6)

Лучшую разбивку этого кода можно найти здесь

Очевидно, что это работает на шестибуквенной строке.Однако, если вы увеличите длину строки, вам нужно будет назначить больше символов в strCharBase.Это займет больше времени, если вы это сделаете.

...