Случайные числа без повторов

Постановка задачи

Предположим, что нам нужно создать набор целых случайных чисел без повторений в заданном диапазоне значений. Примеры на ходу:

  • генерация уникальных случайных кодов для продуктов или пользователей
  • назначение людей на задачи (каждого случайным образом из списка)
  • перестановка слов в поисковом запросе (привет сео-шникам)
  • игра в лото и т. д.

Способ 1. Простой

Для начала рассмотрим простой вариант: нам нужно получить случайный набор из 10 целых чисел от 1 до 10. С помощью встроенной в Excel функции МЕЖДУ ДЕЛОМ (КРАЙ МЕЖДУ) уникальность не гарантируется. Если ввести его в ячейку листа и скопировать на 10 ячеек вниз, то запросто могут произойти повторы:

Случайные числа без повторов

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

Во всех версиях Excel есть функция RANK / ЗВАНИЕ (ЗВОНОК), предназначенный для ранжирования или, другими словами, определения верхней позиции числа в наборе. Наибольшее число в списке имеет ранг = 1, второе сверху — ранг = 2 и так далее.

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

Случайные числа без повторов

В следующем столбце вводим функцию RANK / ЗВАНИЕдля определения позиции в рейтинге для каждого полученного случайного числа:

Случайные числа без повторов

Получаем в столбце B то, что хотели — любое желаемое количество неповторяющихся случайных чисел от 1 до 10.

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

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

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

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

Случайные числа без повторов

Способ 3. Макрос

И, конечно же, решить задачу можно с помощью программирования на Visual Basic. В одной из старых статей о случайной выборке я уже приводил макрофункцию «Лотто-массив», которая выдаёт необходимое количество случайных неповторяющихся чисел из заданного интервала.

  • Как посчитать количество уникальных значений в диапазоне
  • Случайный выбор элементов из списка

Оставьте комментарий