Excel vba случайное число в интервале

Обновлено: 05.07.2024

Нечастая, но интересная задача: выбрать из массива данных (списка) случайным образом N элементов. Причин для ее возникновения может быть несколько, например:

  • Объем данных слишком велик, поэтому мы удовлетворяемся анализом случайной выборки из полного набора данных.
  • Выбор победителей из числа участников какого-либо конкурса или лотереи.

В любом случае перед нами стоит задача отобрать случайным образом заданное количество элементов из какого-либо набора (например, вот такого):

Способ 1. Случайная сортировка

Добавить к нашему списку еще один столбец и вставить в него функцию генерации случайных чисел СЛЧИС (RAND) . Затем отсортировать наш список по добавленному столбцу (Данные - Сортировка) и взять N первых элементов из получившейся таблицы:

Минусы такого способа очевидны - придется вручную каждый раз пересортировывать список, если нам необходимо будет сделать другую случайную выборку. В плюсах - простота и доступность.

Способ 2. Функция НАИМЕНЬШИЙ

Этот способ заключается в использовании функции НАИМЕНЬШИЙ (SMALL) для выбора из списка N позиций с наименьшим случайным числом в столбце А:

После выбора пяти (в нашем примере) наименьших случайных чисел из столбца А, мы вытаскиваем имена, которые соответствуют этим числам с помощью функции ВПР (VLOOKUP).

Способ 3. Случайная выборка без повторов - функция Lotto на VBA

Можно создать простую функцию на VBA, которая будет выдавать заданное количество случайных чисел из нужного интервала. Откроем редактор Visual Basic (ALT+F11 или в старых версиях Excel через меню Сервис - Макрос - Редактор Visual Basic), вставим новый модуль через меню Insert - Module и скопируем туда текст вот такой функции:

У этой функции будет три аргумента:

  • Bottom - нижняя граница интервала случайных чисел
  • Top - верхняя граница интервала случайных чисел
  • Amount - количество случайных чисел, которое мы хотим отобрать из интервала

Т.е., например, чтобы отобрать 5 случайных чисел от 10 до 100, нужно будет ввести =Lotto(10;100;5)

Теперь эту функцию легко использовать для отбора случайных значений. Добавим к нашему списку столбец с нумерацией и будем отбирать людей по случайным номерам, которые генерирует функция Lotto:

Обратите внимание, что наша функция Lotto должна быть введена как формула массива, т.е. сначала необходимо выделить диапазон ячеек результатов (D2:D6) затем ввести нашу функцио Lotto и, после ввода аргументов функции, нажать Ctrl+Shift+Enter, чтобы ввести эту функцию именно как функцию массива во все выделенные ячейки.

Ну, а дальше останется при помощи уже знакомой функции ВПР (VLOOKUP) вытащить имена из списка, соответствующие случайным номерам.

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

Синтаксис

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

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

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

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

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

Оператор Randomize

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

Синтаксис

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

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

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


VBA Randomize - это функция, которая используется для создания функции случайных чисел, которая называется RND. Все мы знаем, что VBA RND используется для создания случайных чисел, которые в основном используются для выставления счетов, для поднятия номеров билетов и многих других для приложений. Здесь VBA Randomize используется для изменения начального значения, которое мы подаем для функции RND. Для лучшего понимания мы используем функцию RND для получения случайных чисел, а затем используем функцию Randomize с RND, которая даст больше разнообразных случайных чисел. Поскольку это изменяется в начальном входном значении, которым выход также изменяется. Это означает, что он сгенерирует числа в соответствии с начальным значением, заданным в функции RND, и сгенерированное число будет в том же диапазоне.

Главное, что есть в VBA Randomize - это то, что у него нет синтаксиса. Нам просто нужно использовать его вместе с функцией RND, которая имеет синтаксис для применения.

Как рандомизировать число в Excel VBA?

Ниже приведены различные примеры рандомизации числа в Excel с использованием функции VBA Rnd.

Вы можете скачать этот шаблон VBA Randomize Excel здесь - Шаблон VBA Randomize Excel

Excel VBA Randomize - Пример № 1

С помощью VBA Randomize очень легко создавать настраиваемые случайные числа. Для этого выполните следующие шаги:

Шаг 1: Перейдите в окно VBA, на вкладке меню « Вставка » выберите « Модуль», как показано ниже.


Шаг 2: Теперь напишите подкатегорию VBA Randomize или мы можем использовать любое имя для определения кода VBA.

Код:


Шаг 3: Теперь определите переменную. Здесь мы рассмотрели переменную RNum как тип данных Double. Логика использования Double заключается в том, что мы получим незначительные изменения в сгенерированных случайных числах. Двойник поможет нам увидеть цифры в десятичных числах.

Код:


Шаг 4: Теперь назначьте функцию VBA RND определенной переменной RNum .

Код:


Код:


Шаг 6: Чтобы увидеть генерацию значения или числа, откройте Immediate Window из списка меню View. Или мы можем использовать горячую клавишу Ctrl + G, чтобы получить это окно.


Шаг 7: Теперь скомпилируйте код и запустите его, нажав на кнопку Play, расположенную под строкой меню. Мы увидим первое случайное число в ближайшем окне, как показано ниже.

И если мы запустим код снова и снова несколько раз, то увидим еще несколько случайных чисел.


Шаг 8: Теперь, если мы применяем Randomize перед функцией RND, то она изменит вход начального числа, который получала функция RND.

Код:


Шаг 9: Снова запустите код несколько раз, чтобы увидеть, какие числа генерируются.


Вот как функция Randomize работает в VBA, если используется с функцией RND .

Давайте посмотрим еще один эксперимент с той же кодировкой. Теперь мы будем использовать функцию CInt с RND, которая используется для преобразования типов данных. Это означает, что он преобразует сгенерированное случайное число как Double в целые числа.

Код:


Теперь снова запустите код. Мы увидим, что теперь случайные числа генерируются как целые числа. Но значения находятся в диапазоне от 0 до 1.


Мы уже видели, что если мы продолжим использовать Double, то значения будут в диапазоне от 0 до 1. Это потому, что мы использовали Randomize вместе с функцией RND. Теперь давайте умножим функцию RND на любое число. Скажем 20.

Код:


Теперь снова запустите код.


Теперь сцена изменилась. Генерируемые случайные значения больше 0, но меньше 20.

Excel VBA Randomize - Пример № 2

Шаг 1: В модуле напишите подкатегорию VBA Randomize, как показано ниже.

Код:


Шаг 2: Рассмотрим ту же переменную, которую мы определили в последнем примере, но как Integer.

Код:


Шаг 3: Теперь выберите функцию Randomize здесь, прежде чем мы начнем помещать математическую формулу.

Код:


Шаг 4: Теперь рассмотрим любую математическую формулу, такую ​​как сложение, вычитание согласно вашему требованию, как показано ниже.

Код:


Шаг 5: Теперь используйте функцию RND, как показано ниже.

Код:


Вы заметили, что мы использовали большую часть математического выражения, которое обычно используется.

Шаг 6: Теперь используйте Msgbox с определенной переменной, чтобы увидеть сгенерированные случайные числа.

Код:


Шаг 7: Теперь запустите код. Мы получим случайное число как 234. Это потому, что число умножается на (300-200 + 1), а затем прибавляется к 200. Это означает, что случайное число имеет гораздо меньшую природу и из-за используемых математических выражений это идет как 234.


Плюсы Excel VBA Рандомизировать

  • Мы можем генерировать любое случайное число между любыми диапазонами, которые мы хотим.
  • Поскольку диапазон становится ограниченным, но все еще нет никаких ограничений на генерацию случайных чисел.
  • Мы можем ограничить диапазон генерации случайных чисел, который будет больше 0.

То, что нужно запомнить

  • Рандомизация также может использоваться с различными функциями. Но использование этого с функцией RND дает результат, который нам нужен.
  • Randomize дает случайные числа от 0 до 1, если используется отдельно с RND.
  • Если мы используем любое другое число или математическое выражение с RND, тогда Randomize будет сгенерирован, случайные числа между наибольшим значением могут быть сгенерированы.
  • После этого сохраните файл в формате Macro Enable Excel.
  • Рандомизацию можно использовать там, где необходимо генерировать случайные числа, но между входными значениями начального диапазона.

Рекомендуемые статьи

Это руководство по VBA Randomize. Здесь мы обсудим, как рандомизировать число в Excel с использованием кода VBA, а также с практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи -

Excel содержит две функции, которые позволяют генерировать произвольные цифры –СЛЧИС и СЛУЧМЕЖДУ. Рассмотрим каждую из них более подробно.

Функция СЛЧИС не имеет аргументов, поэтому просто вписываете ее в строку формул и нажимаете Enter.


При помощи маркера автозаполнения можно применить формулу к нужному количеству ячеек.


Важно! При любом действии с ячейкой число автоматически изменяется. Чтобы его зафиксировать, необходимо поставить курсор в нужную ячейку, выделить выражение в строке формул и нажать клавишу F9.


Особенностью этой функции является то, что она работает в пределах от нуля включительно до единицы с нормальным распределением.

Чтобы сгенерировать цифры в заданном диапазоне, например от 3 до 8, необходимо дополнять формулу.


Чтобы сгенерировать случайное целое число, отлично подойдет функция СЛУЧМЕЖДУ. Где в качестве аргументов выступают два числа – верхняя и нижняя границы. При этом существует несколько особенностей:

  1. Первая часть формулы должна быть меньше второй.
  2. Границы должны быть целыми числами.
  3. Цифры после запятой отбрасываются.


Если умножить формулу на определенный коэффициент, то можно создать случайное дробное число с десятыми, сотыми, тысячными и так далее.




В качестве бонуса рассмотрим, как использовать excel для лотереи. Для начала нужно выгрузить базу данных участников в программу любым известным способом, а затем провести розыгрыш. Формула будет выглядеть следующим образом:

Специальный инструмент

Генератор случайных чисел можно найти в пакете анализа данных, который активируется через надстройки Excel. Чтобы воспользоваться этой функцией, необходимо нажать отдельную кнопку во вкладке Данные на Панели инструментов и из списка выбрать нужную строку.


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


В результате получилось следующее:


Этот метод намного проще, чем описанные выше способы. Однако он не позволяет накладывать дополнительные условия, поэтому генерация не всегда может удовлетворять требованиям пользователя.

Как видите, в редакторе существует несколько способов задания произвольного числа. Если нужны какие-то ограничения, то используйте встроенные функции, а если важно наличие случайного значения, то генератор из анализа данных подойдет лучше.

Функция случайного числа в Excel

  1. Функция СЛЧИС возвращает случайное равномерно распределенное вещественное число. Оно будет меньше 1, больше или равно 0.
  2. Функция СЛУЧМЕЖДУ возвращает случайное целое число.

Выборка случайных чисел с помощью СЛЧИС

Данная функция аргументов не требует (СЛЧИС()).

Чтобы сгенерировать случайное вещественное число в диапазоне от 1 до 5, например, применяем следующую формулу: =СЛЧИС()*(5-1)+1.


Возвращаемое случайное число распределено равномерно на интервале [1,10].

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

  1. Щелкаем по ячейке со случайным числом.
  2. В строке формул выделяем формулу.
  3. Нажимаем F9. И ВВОД.

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

    Сформируем «карманы». Диапазоны, в пределах которых будут находиться значения. Первый такой диапазон – 0-0,1. Для следующих – формула =C2+$C$2.





Диапазон вертикальных значений – частота. Горизонтальных – «карманы».

Как сделать генератор чисел в экселе. Генератор случайных чисел в Excel

В Excel есть функция нахождения случайных чисел =СЛЧИС(). Возможность же найти случайное число в Excel, важная составляющая планирования или анализа, т.к. вы можете спрогнозировать результаты вашей модели на большом количестве данных или просто найти одно рандомное число для проверки своей формулы или опыта.

Чаще всего эта функция применяется для получения большого количества случайных чисел. Т.е. 2-3 числа всегда можно придумать самому, для большого количества проще всего применить функцию.

В большинстве языков программирования подобная функция известная как Random (от англ. случайный), поэтому часто можно встретить обрусевшее выражение «в рандомном порядке» и т.п.

В английском Excel функция СЛЧИС числится как RAND

Начнем с описания функции =СЛЧИС(). Для этой функции не нужны аргументы.

А работает она следующим образом — выводит случайное число от 0 до 1. Число будет вещественное, т.е. по большому счету любое, как правило это десятичные дроби, например 0,0006.

При каждом сохранении число будет меняться, чтобы обновить число без обновления нажмите F9.

Случайное число в определенном диапазоне. Функция

Что делать если вам не подходит имеющийся диапазон случайных чисел, и нужно набор случайных чисел от 20 до 135. Как это можно сделать?

Нужно записать следующую формулу.

Т.е. к 20 будет случайным образом прибавляться число от 0 до 115, что позволит получать каждый раз число в нужном диапазоне (см. первую картинку).

  • Кстати, если вам необходимо найти целое число в таком же диапазоне, для этого существует специальная функция, где мы указываем верхнюю и нижнюю границу значений
  • СЛУЧМЕЖДУ(20;135)
  • Просто, но очень удобно!
  • Если нужно множество ячеек случайных чисел просто протяните ячейку ниже.

Случайное число с определенным шагом

Если нам нужно получить рандомное число с шагом, к примеру пять, то мы воспользуемся одной из . Это будет ОКРВВЕРХ()

Где мы находим случайное число от 0 до 50, а затем округляем его до ближайшего сверху значения кратного 5. Удобно, когда вы делаете расчет для комплектов по 5 штук.

Как применять рандом для проверки модели?

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

Случайное число в VBA

Если вам необходим записать макрос и вы не знаете как это сделать, то можно прочитать .

В VBA применяется функция Rnd(), при этом она не будет работать без включения команды Randomize для запуска генератора случайных чисел. Рассчитаем случайное число от 20 до 135 макросом.

  1. Sub MacroRand() Randomize Range(«A24») = Rnd * 115 + 20 End Sub
  2. Вставьте этот код в редактор VBA (Alt + F11)
  3. Как и всегда, прикладываю пример* со всеми вариантами расчета.
  4. Пишите комментарии, если у вас есть вопросы!

Случайные числа часто бывают полезны в электронных таблицах. Например, вы можете заполнить диапазон случайными числами для тестирования формул или сгенерировать случайные числа для симуляции самых разных процессов. Excel предоставляет несколько способов для генерации случайных чисел.

Использование функции СЛУЧМЕЖДУ

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

В версиях, предшествующих Excel 2007, функция СЛУЧМЕЖДУ
доступна только при установке дополнительного пакета анализа.

Для совместимости с предыдущими версиями (и чтобы избежать использования этой надстройки) используйте такую формулу, где а
представляет нижний, a b — верхний предел: =СЛЧИС()*(b-а)+а.

Чтобы сгенерировать случайное число между 40 и 50, используйте следующую формулу: =СЛЧИС()*(50-40)+40 .

Генератор случайных чисел в Excel в диапазоне с помощью функции СЛУЧМЕЖДУ

СЛУЧМЕЖДУ – это еще одна функция в Excel для создания генератора случайных чисел.. Она возвращает случайные целые числа в указанном диапазоне:

СЛУЧМЕЖДУ (нижняя граница; верхняя граница)

Очевидно, что нижняя граница – это наименьшее число, а верхняя граница – наибольшее число в диапазоне случайных чисел, которые вы хотите получить.

Подобно СЛЧИС, СЛУЧМЕЖДУ в Excel является изменчивой функцией, и она также возвращает новое случайное целое число каждый раз, когда ваша таблица пересчитывается или изменяется.

Например, того чтобы сделать генератор случайных целых чисел от 10 до 50 (включая 10 и 50) используйте следующую формулу СЛУЧМЕЖДУ:


Генератор случайных чисел в Excel – Генерация случайных чисел в заданном диапазоне

Функция СЛУЧМЕЖДУ в Excel может создавать как положительные, так и отрицательные числа случайные числа. Например, чтобы получить список случайных чисел от -10 до 10, введите следующую формулу на листе:

Функция СЛУЧМЕЖДУ доступна в следующих версиях: Excel 2016, Excel 2013, Excel 2010 и Excel 2007.

В более ранней версии Excel 2003, вы можете использовать формулу СЛЧИС , рассмотренную выше.

Далее в этой статье вы найдете еще несколько примеров формул, демонстрирующих, как использовать функцию СЛУЧМЕЖДУ для создания генератора случайных чисел, отличных от целых.

Создание случайных чисел с заданным количеством знаков после запятой

Хотя функция СЛУЧМЕЖДУ в Excel была предназначена для генерации случайных целых чисел, вы можете использовать ее для генерации случайных десятичных чисел с таким количеством десятичных знаков, сколько хотите.

Например, чтобы получить список чисел с одним десятичным знаком, вы умножаете нижнее и верхнее значения на 10, а затем делите возвращаемое значение на 10:

= СЛУЧМЕЖДУ(нижняя граница*10; верхняя граница*10)/10

Например, чтобы получить список чисел с одним десятичным знаком, вы умножаете нижнее и верхнее значения на 10, а затем делите возвращаемое значение на 10:

Следующая формула СЛУЧМЕЖДУ возвращает случайные десятичные числа от 1 до 50:


Генератор случайных чисел в Excel – Генерация случайных чисел с одним знаком после запятой

Аналогичным образом, чтобы сделать генератор случайных чисел от 1 до 50 с двумя знаками после запятой, вы умножаете аргументы функции СЛУЧМЕЖДУ на 100, а затем делите результат на 100:


Как предотвратить повторное вычисление СЛЧИС и СЛУЧМЕЖДУ

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


Описание функции

В Excel имеется функция СЛУЧМЕЖДУ, она возвращает случайное число в заданных границах. Единственный ее минус в том, что она постоянно пересчитывается, даже при вводе значений, никак не связанных с формулой. Все прекрасно работает если у вас немного вычислений и мощный компьютер. Однако постоянный пересчет формулы иногда снижает продуктивность, приходится ждать когда все вычисления выполнятся. Поэтому в надстройку добавили аналогичную функцию, но которая не пересчитывается постоянно.

Функция =СЛУЧМЕЖДУСТАТ(Нижн_граница; Верхн_граница) имеет два аргумента:

Данная функция пересчитывается в следующих случаях:

  1. Когда вы повторно вводите функцию;
  2. Когда вы изменяете значения какого-либо аргумента;
  3. Когда вы выполняете пересчет книги или листа.

Пример 1

Заполнение диапазона случайными значениями от 1 до 1000.

Способ простой

Для начала рассмотрим простой вариант: нам необходимо получить случайный набор из 10 целых чисел от 1 до 10. Использование встроенной в Excel функции СЛУЧМЕЖДУ (RANDBETWEEN) уникальности не гарантирует. Если ввести ее в ячейку листа и скопировать вниз на 10 ячеек, то запросто могут случиться повторы:


Поэтому мы пойдем другим путем.

Во всех версиях Excel есть функция РАНГ (RANG) , предназначенная для ранжирования или, другими словами, определения топовой позиции числа в наборе. Для самого большого числа в списке ранг=1, второе в топе имеет ранг=2 и т.д.

Введем в ячейку А2 функцию СЛЧИС (RAND) без аргументов и скопируем формулу вниз на 10 ячеек. Эта функция сгенерирует нам набор из 10 случайных дробных чисел от 0 до 1:


В соседний столбец введем функцию РАНГ, чтобы определить позицию в рейтинге для каждого полученного случайного числа:


Чисто теоретически, может возникнуть ситуация, когда СЛЧИС выдаст нам два одинаковых случайных числа в столбце А, их ранги совпадут и мы получим повтор в столбце В. Однако, вероятность такого сценария крайне мала, учитывая тот факт, что точность составляет 15 знаков после запятой.

Способ сложный

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

Введите в ячейку А2 следующую формулу, нажмите в конце Ctrl+Shift+Enter (чтобы ввести ее как формулу массива!) и скопируйте формулу вниз на требуемое количество ячеек:

Читайте также: