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

    Генератор случайных чисел в VBA Excel. Функция Rnd, оператор Randomize, функция рабочего листа RandBetween. Синтаксис, параметры, примеры кода.

    Функция 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 с отрицательным аргументом.

    WorksheetFunction.RandBetween

    RandBetween – функция рабочего листа, возвращающая целое случайное число в пределах заданного диапазона значений.

    Синтаксис

    WorksheetFunction.RandBetween(Arg1, Arg2)
    • Arg1 – наименьшее целое число, которое возвращает функция рабочего листа RandBetween (обязательный параметр);
    • Arg2 – наибольшее целое число, которое возвращает функция рабочего листа RandBetween (обязательный параметр).

    Примеры записи строк с WorksheetFunction.RandBetween в VBA Excel (присвоение случайного числа переменной):

    Если данную функцию вставить в ячейку рабочего листа, например: =СЛУЧМЕЖДУ(25;55), случайное число будет обновляться при каждом пересчете листа.

    Примеры с Rnd и Randomize

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    5 комментариев для “VBA Excel. Генератор случайных чисел (Rnd и Randomize)”

      1. Евгений

        Привет, Алекс!
        Чтобы использовать в качестве аргумента функции Rnd или оператора Randomize дату, ее необходимо преобразовать в число:

    1. Можно ли написать ГСЧ для кнопки, которая будет возвращать случайное значение выбранное из диапазона, в назначенную ячейку?

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

    Ваш комментарий будет опубликован после прохождения обязательной модерации. Исходящие ссылки не допускаются. Время модерации составит от нескольких минут до нескольких часов в зависимости от времени суток и занятости модератора.