Создание случайных чисел - PullRequest
0 голосов
/ 03 мая 2018

Я получил некоторую помощь от одного, и код работает отлично.

То, что я ищу, - это объяснение кода, поскольку мои базовые знания VBA не дают мне его.

Может кто-нибудь объяснить, что происходит от "Функции" и ниже?

Sub Opgave8()

For i = 2 To 18288
    If Left(Worksheets("arab").Cells(i, 12), 6) = "262015" Then
        Worksheets("arab").Cells(i, 3) = "18" & UniqueRandDigits(5)
    End If
Next i
End Sub
Function UniqueRandDigits(x As Long) As String
Dim i As Long
Dim n As Integer
Dim s As String
Do
n = Int(Rnd() * 10)
If InStr(s, n) = 0 Then
s = s & n
i = i + 1
End If
Loop Until i = x + 1

UniqueRandDigits = s
End Function

Ответы [ 2 ]

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

Код повторяется от строки 2 до 18288 в рабочей таблице "араб". Если первые 6 символов в 12-м столбце «262015», то в 3-м столбце макрос заполнит ячейку значением «18», за которым следует результат функции UniqueRandDigits(5), которая генерирует 5 уникальных цифр (0-9).

Что касается функции UniqueRandDigits, наиболее важным является то, что Rnd() возвращает значение, меньшее 1, но большее или равное нулю.

Int возвращает целочисленное значение, поэтому Int(Rnd() * 10) сгенерирует случайное целое число от 0 до 9.

If InStr(s, n) = 0 Then гарантирует, что сгенерированное целочисленное значение не существует в уже сгенерированных цифрах этого числа, потому что, как говорит имя функции, они должны быть уникальными.

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

n = Int(Rnd()*10) возвращает значение в диапазоне от 0 до 9, поскольку Rnd возвращает значение в диапазоне от 0 до 1, а Int преобразует его в целое число, иначе говоря, натуральное число.

Затем If InStr(s, n) = 0 проверяет, присутствует ли случайное число в вашем результате: если нет, оно добавляет его с помощью оператора конкатенации строк &.

Этот процесс зацикливается (do) until i = x + 1, где x - ваш входной аргумент, поэтому вы получаете строку длины x. Тогда первая часть просто заполняет строки этими случайными строками.

N.B. Я объяснил, используя логический порядок кода. Функция вашего друга UniqRandDigits определена после «бизнес-логики», но это корень кода.

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