Как рандомизировать значения в ячейке Excel? - PullRequest
0 голосов
/ 04 мая 2018

Я пытаюсь рандомизировать значение ячейки для каждой ячейки. Я хочу, чтобы буквы «тиот» были в начале слова, а затем рандомизировали 7 букв после него, что я и сделал по следующей формуле:

=CHAR(RANDBETWEEN(65,90)) & CHAR(RANDBETWEEN(65,90)) & CHAR(RANDBETWEEN(65,90)) & CHAR(RANDBETWEEN(65,90))& CHAR(RANDBETWEEN(65,90))&RANDBETWEEN(10,99) 

и после объединения обеих ячеек с формулой, подобной =A1&""&B1, я получил желаемые результаты, которые выглядят так: tyotXKWAE73. Теперь следующий шаг - это то, что я не могу понять, это рандомизирует последние шесть букв "tXKWAE73" и оставляет "tyot" всегда впереди. Любые идеи о том, как сделать этот последний шаг?

1 Ответ

0 голосов
/ 04 мая 2018

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

Public Function Shuffle(s As String) As String
    Dim ary(1 To 7) As String, ndex(1 To 7)
    For i = 1 To 7
        ary(i) = Mid(s, i, 1)
        ndex(i) = i
    Next i
    Call Shuffle2(ndex)
    Shuffle = ""
    For i = 1 To 7
        Shuffle = Shuffle & ary(ndex(i))
    Next i
End Function

Public Sub Shuffle2(InOut() As Variant)
    Dim i As Long, J As Long
    Dim tempF As Double, Temp As Variant

    Hi = UBound(InOut)
    Low = LBound(InOut)
    ReDim Helper(Low To Hi) As Double
    Randomize

    For i = Low To Hi
        Helper(i) = Rnd
    Next i

    J = (Hi - Low + 1) \ 2
    Do While J > 0
        For i = Low To Hi - J
          If Helper(i) > Helper(i + J) Then
            tempF = Helper(i)
            Helper(i) = Helper(i + J)
            Helper(i + J) = tempF
            Temp = InOut(i)
            InOut(i) = InOut(i + J)
            InOut(i + J) = Temp
          End If
        Next i
        For i = Hi - J To Low Step -1
          If Helper(i) > Helper(i + J) Then
            tempF = Helper(i)
            Helper(i) = Helper(i + J)
            Helper(i + J) = tempF
            Temp = InOut(i)
            InOut(i) = InOut(i + J)
            InOut(i + J) = Temp
          End If
        Next i
        J = J \ 2
    Loop
End Sub

Затем в B1 введите:

=CHAR(RANDBETWEEN(65,90)) & CHAR(RANDBETWEEN(65,90)) & CHAR(RANDBETWEEN(65,90)) & CHAR(RANDBETWEEN(65,90))& CHAR(RANDBETWEEN(65,90))&RANDBETWEEN(10,99)

В В2 введите:

="tyot" & shuffle(B$1)

и скопировать вниз:

enter image description here

Каждая запись в столбце B является «рандомизацией» B1 с фиксированным префиксом.

...