Как сгенерировать случайное число в Excel: полное руководство с примерами

Почему Excel генерирует одни и те же «случайные» числа?

Вы когда-нибудь сталкивались с ситуацией, когда после пересчёта таблицы (F9) в Excel вдруг все «случайные» числа превращаются в одинаковые? Это не баг программы, а особенность работы функции РАНД() (или RAND() в английской версии). Дело в том, что Excel использует псевдослучайные числа — их последовательность определяется внутренним алгоритмом, который сбрасывается при каждом пересчёте. Для большинства задач (симуляции, тестирования, случайного распределения) этого достаточно, но если вам нужны по-настоящему уникальные значения, придётся комбинировать функции или использовать VBA.

В этой статье мы разберём не только базовые способы генерации случайных чисел, но и продвинутые техники: как зафиксировать результат, создать динамические диапазоны без повторений, или даже сгенерировать случайные даты. А ещё вы узнаете, почему РАНДМЕЖДУ() иногда выдаёт ошибку #ЗНАЧ! и как этого избежать.

Предупреждение для перфекционистов: Excel не подходит для криптографически стойкой генерации случайных чисел (например, для создания паролей или финансовых транзакций). Для таких задач используйте специализированные инструменты вроде Python с библиотекой secrets.

📊 Для чего вам нужны случайные числа в Excel?
Тестирование формул
Создание выборок
Игры/лотереи
Обучение/практика
Другое

Базовый способ: функция РАНД() и её ограничения

Самый простой метод — использовать функцию =РАНД(). Она возвращает случайное число от 0 до 1 (не включая 1). Например:

=РАНД()  → 0,456789123

Но у этого метода есть три критичных недостатка:

  • 🔄 Пересчёт: число меняется при каждом изменении таблицы или нажатии F9.
  • 📏 Диапазон: только от 0 до 1. Чтобы получить, например, числа от 10 до 100, нужно использовать формулу:
    =РАНД()*(100-10)+10
  • 🔢 Повторы: вероятность повторений высока, особенно в больших выборках.

Если вам нужно зафиксировать случайные числа один раз и больше не изменять, используйте приём «превращения формулы в значение»: выделите ячейки → Копировать (Ctrl+C) → Специальная вставка → Значения (Ctrl+Alt+V → В).

РАНДМЕЖДУ(): случайные целые числа в заданном диапазоне

Функция =РАНДМЕЖДУ(нижняя_граница; верхняя_граница) (или RANDBETWEEN()) решает проблему ограниченного диапазона РАНД(). Она возвращает целое случайное число между двумя указанными значениями, включая их самих. Примеры:

=РАНДМЕЖДУ(1; 10)   → 7

=РАНДМЕЖДУ(-5; 5) → -2

=РАНДМЕЖДУ(100; 200) → 156

Однако здесь есть подводные камни:

⚠️ Внимание: Если нижняя_граница > верхняя_граница, Excel вернёт ошибку #ЗНАЧ!. Например, =РАНДМЕЖДУ(10; 1) не сработает.

Также РАНДМЕЖДУ() не поддерживает дробные числа. Чтобы получить случайное число с плавающей запятой (например, от 1.5 до 3.5), комбинируйте её с РАНД():

=РАНДМЕЖДУ(1; 3) + РАНД()
Задача Формула Пример результата
Случайное число от 0 до 1 =РАНД() 0,712345678
Случайное целое от 5 до 15 =РАНДМЕЖДУ(5; 15) 12
Случайное дробное от 2.5 до 4.5 =РАНД()*(4,5-2,5)+2,5 3,87654321
Случайная дата в 2026 году =ДАТА(2026; РАНДМЕЖДУ(1;12); РАНДМЕЖДУ(1;28)) 15.07.2026

Как сгенерировать уникальные случайные числа без повторов

По умолчанию РАНД() и РАНДМЕЖДУ() могут выдавать повторяющиеся значения. Если вам нужны уникальные числа (например, для розыгрыша призов или случайной выборки), используйте один из этих методов:

Метод 1: Функция ПОСЛЕД() + СОРТИРОВКА() (Excel 365/2021)

Для современных версий Excel подходит динамическая формула:

=ПОСЛЕД(СОРТИРОВКА(РАНДМЕЖДУ(1;100);1); 10)

Эта формула генерирует 10 уникальных чисел от 1 до 100. Как она работает:

  1. РАНДМЕЖДУ(1;100) создаёт массив из 100 чисел.
  2. СОРТИРОВКА(...,1) сортирует их по убыванию (ключ 1).
  3. ПОСЛЕД(...,10) берёт первые 10 элементов отсортированного массива.

Метод 2: VBA-скрипт для старых версий Excel

Если у вас Excel 2016 или старше, используйте макрос:

Код VBA для уникальных случайных чисел

Sub UniqueRandomNumbers()

Dim rng As Range, arr(), i As Long, n As Long, temp As Variant

Set rng = Selection

n = rng.Rows.Count

ReDim arr(1 To n)

For i = 1 To n

Do

temp = Int((100 - 1 + 1) * Rnd + 1)

Loop While Not IsError(Application.Match(temp, arr, 0))

arr(i) = temp

Next i

rng.Value = Application.Transpose(arr)

End Sub

Чтобы запустить скрипт:

  1. Нажмите Alt+F11, чтобы открыть редактор VBA.
  2. Вставьте код выше в новый модуль.
  3. Выделите диапазон ячеек (например, A1:A10).
  4. Запустите макрос через Выполнить → UniqueRandomNumbers.

Выделите диапазон с числами

Примените условное форматирование → Правила выделения ячеек → Повторяющиеся значения

Убедитесь, что повторов нет (ячейки не подсвечены)

Скопируйте значения на новый лист для резервной копии-->

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

Excel позволяет генерировать не только числа, но и случайные даты, время или даже текст. Вот несколько полезных формул:

  • 📅 Случайная дата между двумя датами:
    =ДАТА(2026; РАНДМЕЖДУ(1;12); РАНДМЕЖДУ(1;28))
    Осторожно: февраль может иметь 28 или 29 дней, а апрель/июнь/сентябрь/ноябрь — 30.
  • Случайное время:
    =РАНД()*(1-"0:00")+"0:00"

    Форматируйте ячейку как [h]:mm:ss для корректного отображения.

  • 🔤 Случайный текст из списка:
    =ИНДЕКС({"Яблоко";"Банан";"Вишня"}; РАНДМЕЖДУ(1;3))

    Или используйте ВЫБОР():

    =ВЫБОР(РАНДМЕЖДУ(1;3); "Красный"; "Зелёный"; "Синий")
⚠️ Внимание: При генерации случайных дат учитывайте высокосные годы. Формула =ДАТА(2026;2;29) вернёт корректную дату, а =ДАТА(2023;2;29) — ошибку #ЧИСЛО!, так как 2023 год не високосный.

Динамические массивы случайных чисел (Excel 365)

В новых версиях Excel (365 и 2021) появилась поддержка динамических массивов. Это позволяет генерировать целые таблицы случайных чисел одной формулой. Примеры:

  • 📊 Матрица 5×5 со случайными числами от 1 до 100:
    =РАНДМЕЖДУ(1;100; 5;5)

    Аргументы 5;5 задают количество строк и столбцов.

  • 🔢 Последовательность из 10 уникальных чисел:
    =ПОСЛЕД(СОРТИРОВКА(УНИК(РАНДМЕЖДУ(1;50;20;1)));10)

    Здесь УНИК() удаляет повторы, а ПОСЛЕД() берёт первые 10 значений.

Динамические массивы автоматически «проливаются» на соседние ячейки. Если вам нужно ограничить область, используйте функцию ИНДЕКС():

=ИНДЕКС(РАНДМЕЖДУ(1;100;5;5); ПОСЛЕДОВАТ(5); ПОСЛЕДОВАТ(1;5))

Продвинутые техники: VBA и Power Query

Если встроенных функций недостаточно, обратите внимание на VBA или Power Query. Эти инструменты позволяют:

  • 🔄 Генерацию случайных чисел без пересчёта при изменении таблицы.
  • 📈 Создание сложных распределений (нормальное, экспоненциальное).
  • 🔗 Импорт случайных данных из внешних источников.

Пример VBA-кода для генерации нормально распределённых чисел (метод Бокса-Мюллера):

Код VBA для нормального распределения

Function NormalRandom(mean As Double, stddev As Double) As Double

Dim u1 As Double, u2 As Double, w As Double, mult As Double

Do

u1 = Rnd()

u2 = Rnd()

w = u1 u1 + u2 u2

Loop While w >= 1

mult = Sqr(-2 * Log(w) / w)

NormalRandom = mean + stddev u1 mult

End Function

Чтобы использовать эту функцию:

  1. Вставьте код в модуль VBA.
  2. В ячейке напишите =NormalRandom(10;2), где 10 — среднее, а 2 — стандартное отклонение.

Для Power Query подойдёт следующий подход:

  1. Создайте новый запрос → Другие источники → Пустой запрос.
  2. В редакторе введите код:
    = List.Generate(
    

    () => [Counter = 0, Random = Random.Between(1, 100)],

    each [Counter] < 100,

    each [Counter = [Counter] + 1, Random = Random.Between(1, 100)],

    each [Random]

    )

  3. Загрузите данные в таблицу.

Типичные ошибки и как их избежать

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

Ошибка Причина Решение
#ЗНАЧ! в РАНДМЕЖДУ() Нижняя граница больше верхней Поменяйте аргументы местами: =РАНДМЕЖДУ(1;10), а не =РАНДМЕЖДУ(10;1)
Числа не обновляются Режим расчёта установлен в Вручную Перейдите в Формулы → Параметры вычислений → Автоматически
Повторяющиеся значения в выборке Используется только РАНД() или РАНДМЕЖДУ() Примените методы из раздела «Уникальные числа» (например, УНИК() + СОРТИРОВКА())
Ошибка #ИМЯ? Опечатка в названии функции (например, РАНДОМ() вместо РАНД()) Проверьте синтаксис. В английской версии Excel используйте RAND() и RANDBETWEEN()
⚠️ Внимание: Если вы используете РАНД() в условном форматировании, помните, что правила будут пересчитываться при каждом изменении таблицы. Это может привести к «мерцанию» цветов или неожиданным результатам. Чтобы избежать этого, фиксируйте значения через Специальная вставка → Значения.

FAQ: Ответы на частые вопросы

Можно ли сгенерировать случайное число, которое не будет меняться при пересчёте?

Да. После генерации выделите ячейки с формулами и выполните Копировать → Специальная вставка → Значения. Также можно использовать VBA для однократной генерации.

Как сделать так, чтобы случайные числа обновлялись только по кнопке?

Создайте кнопку через Вставка → Кнопка (Элемент управления) и назначьте ей макрос:

Sub UpdateRandom()

Application.Calculate

End Sub

Теперь числа будут обновляться только при нажатии на кнопку.

Почему РАНДМЕЖДУ(1;100) выдаёт повторяющиеся числа?

Это нормальное поведение. Функция не гарантирует уникальность. Для уникальных значений используйте комбинацию УНИК() + СОРТИРОВКА() (Excel 365) или VBA-скрипт.

Можно ли сгенерировать случайное число в Google Sheets?

Да, в Google Таблицах используйте:

  • =RAND() — аналог РАНД().
  • =RANDBETWEEN(1;100) — аналог РАНДМЕЖДУ().
  • =ARRAYFORMULA(RANDBETWEEN(1;100;10;1)) — для генерации столбца из 10 чисел.

Как сгенерировать случайную букву или символ?

Используйте функцию СИМВОЛ() с РАНДМЕЖДУ():

=СИМВОЛ(РАНДМЕЖДУ(65;90))

Это вернёт случайную заглавную букву от A до Z (коды ASCII 65–90). Для строчных букв используйте диапазон 97;122.