Генерация случайных чисел без повторов vba excel
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает случайное число типа Single.
Перегрузки
Возвращает случайное число типа Single.
Возвращает случайное число типа Single.
Возвращает случайное число типа Single.
Возвращаемое значение
Следующее случайное число в последовательности.
Примеры
В этом примере функция используется Rnd для создания случайного целочисленного значения в диапазоне от 1 до 6.
Комментарии
Функция Rnd возвращает значение меньше 1, но больше или равно нулю.
Перед вызовом Rnd``Randomize используйте оператор без аргумента для инициализации генератора случайных чисел с начальным значением на основе системного таймера.
Чтобы создать случайные целые числа в заданном диапазоне, используйте следующую формулу.
Здесь самое upperbound большое число в диапазоне и lowerbound является наименьшим числом в диапазоне.
Чтобы повторить последовательности случайных чисел, вызовите Rnd отрицательный аргумент непосредственно перед использованием Randomize с числовым аргументом.
Random Поскольку инструкция и Rnd функция начинаются с начального значения и создают числа, которые попадают в конечный диапазон, результаты могут быть предсказуемыми тем, кто знает алгоритм, используемый для их создания. Следовательно, Random оператор и Rnd функция не должны использоваться для создания случайных чисел для использования в криптографии.
См. также раздел
Применяется к
Rnd(Single)
Возвращает случайное число типа Single.
Параметры
Необязательный элемент. Значение типа Single значение или любое допустимое выражение типа Single.
Возвращаемое значение
Если аргумент Number меньше нуля, Rnd создает каждый раз одно и то же число, используя Number в качестве начального числа. Если аргумент Number больше нуля, Rnd создает следующее случайное число в последовательности. Если аргумент Number равен нулю, функция Rnd генерирует самое последнее созданное число. Если аргумент Number не указан, функция Rnd создает следующее случайное число в последовательности.
Примеры
В этом примере функция используется Rnd для создания случайного целочисленного значения в диапазоне от 1 до 6.
Комментарии
Функция Rnd возвращает значение меньше 1, но больше или равно нулю.
Значение Number определяет способ Rnd создания случайного числа.
Для любого начального начального значения создается та же последовательность чисел, так как каждый последовательный вызов Rnd функции использует ранее созданное число в качестве начального значения для следующего числа в последовательности.
Перед вызовом Rnd``Randomize используйте оператор без аргумента для инициализации генератора случайных чисел с начальным значением на основе системного таймера.
Чтобы создать случайные целые числа в заданном диапазоне, используйте следующую формулу.
Здесь самое upperbound большое число в диапазоне и lowerbound является наименьшим числом в диапазоне.
Чтобы повторить последовательности случайных чисел, вызовите Rnd отрицательный аргумент непосредственно перед использованием Randomize с числовым аргументом. Использование Randomize с тем же значением для Number не повторяет предыдущую последовательность.
Random Поскольку инструкция и Rnd функция начинаются с начального значения и создают числа, которые попадают в конечный диапазон, результаты могут быть предсказуемыми тем, кто знает алгоритм, используемый для их создания. Следовательно, Random оператор и Rnd функция не должны использоваться для создания случайных чисел для использования в криптографии.
Нечастая, но интересная задача: выбрать из массива данных (списка) случайным образом 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) вытащить имена из списка, соответствующие случайным номерам.
Добрый день.
Нужна помощь)
Задача следующая
Есть число например 123 531 55 55.
Нужно что бы в ячейке ниже было точно такое же число но изменились рандомно только комбинация цифр 531 и в итоге вышло 123 486 55 55. Количество нужных чисел задаётся. Рандом нужен без повтора. Иногда надо и 500 внести и 100. Вот код замены и рандома есть. Но рандом повторяется.(( замучался уже делать ничего не получается((
Заполнение случайными значениями массива чисел 4 на 5 без повтора
Приветствую вас парни! Подсобите с кодом. Голова уже опухла, хожу блужу вокруг трех сосен. Нужен.
Случайное число в VBA без повтора в диапазоне, работает по нажатию кнопки
Недавно начал изучение и использование VBA в Power Point. Возникла задача: нужно чтобы по нажатию.
Генератор числа без повтора. Не имею понятия в чем дело
Здравствуйте, задача такова. В функции вызвать случайное число, но чтобы онон не повторялось. Я.
Рандом чисел без повтора
Добрый вечер ребят подскажыте код который сможет срандомить и присвоить 10-тю переменым 10 разных.
Проаеряйте через коллекцию или словарь что очередное число уже не генерилось. Ну или можно поиском по уже выгруженным (что дольше).
Спасибо, проверю сообщу)
Добавлено через 5 минут
Все норм работает) спасибо) только вопрос)
получается что возможно только ввести 999 вариантов. При попытке более excel зависает. что делать)?
вариант не вводить более не подходит. так как в этой формуле одновременно может быть комбинация и с 3 и с 2 и с одной цифрой.
Ну а как Вы хотели - на 3 цифры придумать более 999 вариантов? Сплошные нули кажется не генерятся. Но их можно закинуть вручную в случайную ячейку коллекции.
P.S. на файлообменник лично я не ходок в рабочее время.
Просто получится даже при генерации числа более 99 зависнет. Так как в файле который выложил есть и по две цифры
Не знаю, 150 сгенерило влёт.
Добавлено через 8 минут
Проверил - сгенерило и 1000, т.е. нули генерятся!
Достаточно быстро всё делаеться, и не сложно для понимания,
хотелось бы сделать в виде функции, для того чтобы в аргументы вписать Min и Max
но обычно ими не умеют пользоваться, поэтому я сделал вариант для того
чтобы только скопировать и запустить новый макрос
Добавлено через 6 минут
Суть в следующем:
Сначало в коллекцию переписываются значения от 100 до 1000 по порядку
тоесть 100, 101, 102.
Затем выбираеться индекс, число выбранного индекса записываеться в массив
а сам индекс удаляеться
Добавлено через 39 минут
Вот еще вариант, для самостоятельного определения Min и Max
Rnd – это функция, которая возвращает значение типа Single, содержащее псевдослучайное число меньшее 1, но большее или равное нулю.
Псевдослучайное число отличается от случайного тем, что оно получено с помощью алгоритма, который, в любом случае, подчиняется какой-либо закономерности. Для решения большинства, а возможно и всех, задач в VBA Excel псевдослучайное число можно считать случайным.
Синтаксис
Число – необязательный параметр, определяющий алгоритм вычисления псевдослучайного числа. Зависимость случайного числа от этого параметра:
Число | Возвращаемое значение |
---|---|
Меньше нуля | Одно и то же псевдослучайное число каждый раз, как результат использования параметра Число в качестве начального значения для алгоритма |
Больше нуля | Каждое следующее число в псевдослучайном порядке |
Равно нулю | Самое последнее псевдослучайное число, созданное функцией Rnd |
По умолчанию | Каждое следующее число в псевдослучайном порядке |
Для любого параметра Число создается одна и та же последовательность чисел, так как каждый последующий вызов функции Rnd использует предыдущее значение в качестве начального для следующего псевдослучайного числа в последовательности.
Функция Rnd – это и есть простейший генератор случайных чисел в VBA Excel, возвращающий значения в интервале 0
Чтобы повысить «случайность» псевдослучайных чисел, возвращаемых функцией Rnd, используется оператор Randomize.
Оператор Randomize
Randomize – это оператор, который инициализирует генератор случайных чисел функции Rnd, задавая начальное число для генерации первого псевдослучайного числа.
Синтаксис
Число – необязательный параметр, задающий начальное число для генерации. Если параметр Число опущен, используется значение, возвращенное системным таймером.
При повторном использовании в VBA Excel оператора Randomize с тем же значением аргумента Число предыдущая последовательность не повторяется.
Для повторения предыдущей последовательности случайных чисел необходимо непосредственно перед оператором Randomize с тем же значением аргумента Число вызвать функцию Rnd с отрицательным аргументом.
WorksheetFunction.RandBetween
RandBetween – функция рабочего листа, возвращающая целое случайное число в пределах заданного диапазона значений.
Синтаксис
- Arg1 – наименьшее целое число, которое возвращает функция рабочего листа RandBetween (обязательный параметр);
- Arg2 – наибольшее целое число, которое возвращает функция рабочего листа RandBetween (обязательный параметр).
Примеры записи строк с WorksheetFunction.RandBetween в VBA Excel (присвоение случайного числа переменной):
Возвращает одно , содержащее псевдо-случайный номер.
Синтаксис
Rnd [ (Номер) ]
Возвращаемые значения
Если номер | Rnd создает |
---|---|
Меньше нуля | Каждый раз одно и то же число, используя номер в качестве семени. |
Больше нуля | Следующий номер в псевдо-случайной последовательности. |
Равно нулю | Самое последнее созданное число. |
Не предоставлено | Следующий номер в псевдо-случайной последовательности. |
Примечания
Функция Rnd возвращает значение, меньшее 1, но большее или равное нулю.
Значение Number определяет , как Rnd создает псевдо-случайное число:
Для любого данного начального значения создается одна и та же последовательность чисел, поскольку каждый последующий вызов функции Rnd использует предыдущее значение в качестве начального для следующего числа в последовательности.
Перед вызовом Rnd используйте заявление Randomize без аргумента для инициализации генератора случайных номеров с семенами на основе системного времени.
Для получения случайных целых чисел в данном диапазоне, используйте следующую формулу:
Здесь upperbound представляет собой самое большое число в диапазоне, а lowerbound — самое маленькое.
Для повтора последовательностей случайных чисел вызывайте функцию Rnd с отрицательным аргументом непосредственно перед использованием оператора Randomize с числовым аргументом. Использование Randomize с таким же значением для Number не повторяет предыдущую последовательность.
Пример
В этом примере используется функция Rnd для создания случайного целого значения от 1 до 6.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Читайте также: