Перейти к содержимому

VBA Excel. Генератор случайных чисел (Rnd и Randomize)

Случайные числа в VBA Excel, генерируемые с помощью функции Rnd и оператора Randomize. Синтаксис и параметры. Примеры кода с генератором случайных чисел.

  1. Функция Rnd
  2. Оператор Randomize
  3. Примеры генерации случайных чисел

Функция Rnd

Rnd – это функция, которая возвращает значение типа Single, содержащее псевдослучайное число меньшее 1, но большее или равное нулю.

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

Синтаксис

Rnd[(Число)]

Число – необязательный параметр, определяющий алгоритм вычисления псевдослучайного числа. Зависимость случайного числа от этого параметра:

Число Возвращаемое значение
Меньше нуля Одно и то же псевдослучайное число каждый раз, как результат использования параметра Число в качестве начального значения для алгоритма
Больше нуля Каждое следующее число в псевдослучайном порядке
Равно нулю Самое последнее псевдослучайное число, созданное функцией Rnd
По умолчанию Каждое следующее число в псевдослучайном порядке

Для любого параметра Число создается одна и та же последовательность чисел, так как каждый последующий вызов функции Rnd использует предыдущее значение в качестве начального для следующего псевдослучайного числа в последовательности.

Функция Rnd – это и есть простейший генератор случайных чисел в VBA Excel, возвращающий значения в интервале 0<=Rnd<1.

Чтобы повысить «случайность» псевдослучайных чисел, возвращаемых функцией Rnd, используется оператор Randomize.

Оператор Randomize

Randomize – это оператор, который инициализирует генератор случайных чисел функции Rnd, задавая начальное число для генерации первого псевдослучайного числа.

Синтаксис

Randomize[Число]

Число – необязательный параметр, задающий начальное число для генерации. Если параметр Число опущен, используется значение, возвращенное системным таймером.

При повторном использовании в VBA Excel оператора Randomize с тем же значением аргумента Число предыдущая последовательность не повторяется.

Для повторения предыдущей последовательности случайных чисел необходимо непосредственно перед оператором Randomize с тем же значением аргумента Число вызвать функцию Rnd с отрицательным аргументом.

Примеры генерации случайных чисел

Пример 1
Запускаем генератор случайных чисел функции Rnd с разными параметрами и выводим результаты на рабочий лист Excel:

Sub Primer1()
Dim i As Byte
  Cells(1, 1) = "Rnd(-5)"
    For i = 2 To 5
      Cells(i, 1) = Rnd(-5)
    Next
  Cells(1, 2) = "Rnd(3)"
    For i = 2 To 5
      Cells(i, 2) = Rnd(3)
    Next
  Cells(1, 3) = "Rnd(0)"
    For i = 2 To 5
      Cells(i, 3) = Rnd(0)
    Next
End Sub

Получаем следующий результат:

Случайные числа, возвращаемые функцией Rnd с разными аргументами

Пример 2
Повторное использование оператора Randomize с тем же значением аргумента Число:

Sub Primer2()
Dim i As Byte
  Cells(1, 1) = "Последовательность 1"
  Rnd (-1)
  Randomize 4
    For i = 2 To 5
      Cells(i, 1) = Rnd
    Next
  Cells(1, 2) = "Последовательность 2"
  Randomize 4
    For i = 2 To 5
      Cells(i, 2) = Rnd
    Next
  Cells(1, 3) = "Последовательность 3"
  Rnd (-1)
  Randomize 4
    For i = 2 To 5
      Cells(i, 3) = Rnd
    Next
End Sub

Строка кода Rnd (-1) обеспечивает генерацию последовательности случайных чисел сначала при повторных использованиях оператора Randomize.

Повторное использование оператора Randomize при генерации случайных чисел

Строка кода Randomize 4 перед заполнением второго столбца не влияет на работу функции Rnd, а заполнение последовательности для третьего столбца начинается заново благодаря строке Rnd (-1) перед оператором Randomize.

Пример 3
Создание генераторов случайных чисел для разных диапазонов. Исходим из того, что функция Rnd генерирует псевдослучайную последовательность из чисел меньше 1, но больше или равным 0.

Примеры с положительными случайными числами:

'От 0 (включительно) до 10
  10 * Rnd
'От 6 (включительно) до 7
  Rnd + 6
'От 5 (включительно) до 10
  5 * Rnd + 5

Примеры с отрицательными случайными числами:

'От -10 до 0 (включительно)
  -10 * Rnd
'От -10 до 10 (включительно)
  -20 * Rnd + 10
'От -10 до -5 (включительно)
  -(5 * Rnd + 5)

Пример заполнения ячеек положительными и отрицательными случайными числами на листе Excel:

Sub Primer3()
Dim i As Byte
  Cells(1, 1) = "От 1 до 3"
    For i = 2 To 9
      Cells(i, 1) = 2 * Rnd + 1
    Next
  Cells(1, 2) = "От -5 до 5"
    For i = 2 To 9
      Cells(i, 2) = -10 * Rnd + 5
    Next
  Cells(1, 3) = "От -5 до -2"
    For i = 2 To 9
      Cells(i, 3) = -3 * Rnd - 2
    Next
End Sub

Результат выполнения кода VBA Excel третьего примера:

Примеры положительных и отрицательных случайных чисел

Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

Добавить комментарий

Ваш комментарий будет опубликован после прохождения обязательной модерации. Исходящие ссылки не допускаются. Время модерации составит от нескольких минут до нескольких часов в зависимости от времени суток и занятости модератора. При добавлении в комментарий кода VBA Excel, вставьте перед его началом тег [vb] и по окончании кода - [/vb].