Генерация случайных чисел в Google Sheets

Обычно в таблицах требуется быстро сгенерировать набор случайных чисел — для тестовых наборов данных, симуляций или проверки формул. Вручную заполнять клетки долго и неудобно; лучшая практика — использовать встроенные функции Google Sheets. В этой статье подробно разберём, как и когда применять RAND, RANDBETWEEN и RANDARRAY, как контролировать их поведение, а также практические приёмы и готовые шаблоны.
Что такое RAND, RANDBETWEEN и RANDARRAY
Краткие определения:
- RAND — возвращает случайное дробное число x, 0 ≤ x < 1.
- RANDBETWEEN(lower, upper) — возвращает случайное целое в диапазоне [lower, upper].
- RANDARRAY(rows, columns) — создаёт массив случайных дробных чисел; аргументы необязательны.
Определения по одной строке для быстрой справки:
- RAND: дробный генератор [0,1).
- RANDBETWEEN: целочисленный генератор между двумя границами.
- RANDARRAY: массив случайных чисел указанного размера.
RAND — синтаксис и поведение
=RAND()Функция не принимает аргументов; если внутри скобок что-то написать, вернётся ошибка. RAND — «волатильная» функция: значение пересчитывается при каждом изменении таблицы или при перезагрузке вкладки. Из-за этого при большом количестве вызовов лист может заметно замедляться.
Примеры использования:
- Получить десятичную дробь:
=RAND() - Преобразовать в процент:
=RAND()*100или=ROUND(RAND()*100,2)
Совет: если нужно, чтобы результат не менялся снова, скопируйте и вставьте как значения (Правка → Специальная вставка → Только значения).
RANDBETWEEN — синтаксис и тонкости
=RANDBETWEEN(lower, upper)Аргументы:
- lower — целое, нижняя граница (включительно).
- upper — целое, верхняя граница (включительно).
Ограничения:
- Оба аргумента должны быть целыми (можно ссылкой на ячейку или числом).
- lower должен быть меньше или равен upper.
Пример: если в A1=1 и A2=100, то =RANDBETWEEN(A1,A2) вернёт случайное целое от 1 до 100.
Отличия от RAND:
- RAND возвращает дробные числа; RANDBETWEEN — целые.
- RAND не принимает аргументы; RANDBETWEEN требует две границы.
- В узких диапазонах вероятность повторов выше для RANDBETWEEN.
Как сгенерировать случайное число между произвольными границами
Чтобы получить дробное случайное число между двумя числами X (верх) и Y (низ), используйте формулу:
=RAND() * (X - Y) + YПример: случайное дробное между 1 и 100:
=RAND() * (100 - 1) + 1Если нужен целый результат, сочетайте с ROUND, INT или ROUNDDOWN:
=INT(RAND() * (100 - 1 + 1)) + 1 // эквивалент RANDBETWEEN(1,100)Альтернатива: использовать RANDBETWEEN напрямую для целых:
=RANDBETWEEN(1,100)Инструкция по использованию RANDBETWEEN со ссылками на ячейки:
- Введите нижнюю и верхнюю границы в отдельные ячейки (например, A1 и A2).
- В целевой ячейке напишите
=RANDBETWEEN(A1,A2). - Нажмите Enter.
- Для копирования формулы воспользуйтесь маркером заполнения (перетяните маленький синий квадратик в правом нижнем углу).
RANDARRAY — создание массива случайных чисел
=RANDARRAY(rows, columns)Оба аргумента необязательны; если не указаны, RANDARRAY вернёт одно случайное число. Укажите число строк и столбцов для генерации матрицы.
Пример: создать матрицу 5 строк × 3 столбца:
=RANDARRAY(5,3)RANDARRAY удобно использовать при генерации тестовых наборов или при одновременной инициализации нескольких столбцов.
Порядок действий:
- Выделите ячейку, где начнётся массив.
- Введите
=RANDARRAY(число_строк,число_столбцов). - Нажмите Enter — массив автоматически заполнит область.
Управление пересчётом (частота обновления) волатильных функций
Так как RAND и RANDBETWEEN волатильны, Google Sheets пересчитывает их при изменениях в таблице или при перезагрузке. Чтобы снизить частоту обновления или удержать значения стабильными, измените настройки пересчёта:
- В меню нажмите Файл → Настройки.
- Перейдите на вкладку «Вычисления».
- В разделе «Пересчёт» выберите необходимую опцию (например, «При изменениях и раз в минуту», «При изменениях» или «Никогда»).
- Нажмите Сохранить настройки.
Важно: опция «Никогда» предотвращает автоматический пересчёт, но новые значения по-прежнему появятся, если вручную пересчитать лист или изменить наиболее критичные параметры.
Практические приёмы и шаблоны
Фиксация текущих случайных значений (чтобы они больше не менялись):
- Скопируйте диапазон с формулами → Правка → Специальная вставка → Только значения.
Получить уникальные случайные целые (без повторов) в ограниченном диапазоне:
- Если диапазон достаточно большой, используйте сортировку по случайному ключу: в столбце рядом
=RAND()и затем сортируйте по нему. После сортировки скопируйте только требуемые значения и вставьте как значения.
- Если диапазон достаточно большой, используйте сортировку по случайному ключу: в столбце рядом
Повторяемые (детерминированные) наборы для тестов:
- Google Sheets не поддерживает управление seed у встроенных функций. Для воспроизводимости используйте Google Apps Script, где можно управлять генератором псевдослучайных чисел, или сохраняйте сгенерированные значения как статичный набор.
Генерация случайных дат:
- Пример: случайная дата между 01.01.2020 и 31.12.2020:
=DATE(2020,1,1) + RANDBETWEEN(0, DATE(2020,12,31)-DATE(2020,1,1))Ограничение точности дробных чисел:
=ROUND(RAND()*(b-a)+a, 2)— два знака после запятой.
Генерация случайных булевых значений (TRUE/FALSE):
=RAND() < 0.5
Альтернативы и расширения
- Google Apps Script: если нужна контрольная последовательность (seed), сложная логика или высокопроизводительная генерация большого объёма чисел, напишите скрипт и возвращайте значения в диапазон.
- Внешние генераторы и импорт: можно сгенерировать данные в Python/R и загрузить через CSV или API.
- Использовать QUERY/UNIQUE/CUSTOM FORMULAS: для фильтрации, удаления повторов и постобработки.
Пример простого скрипта на Apps Script для заполнения диапазона псевдослучайными числами от 0 до 1 с управляемым seed (типовой подход — использовать Math.random; для повторяемости применяются внешние библиотеки или собственный LCG):
function fillRandom(rangeA1, rows, cols) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var values = [];
for (var r = 0; r < rows; r++) {
var row = [];
for (var c = 0; c < cols; c++) {
row.push(Math.random());
}
values.push(row);
}
sheet.getRange(rangeA1).offset(0,0,rows,cols).setValues(values);
}Замечание: Math.random() не поддерживает seed по умолчанию; для детерминированности добавьте LCG-реализацию.
Когда встроенные функции не подходят (контрпримеры)
- Нужна воспроизводимость по seed — встроенные функции не подойдут.
- Большие таблицы с тысячами RAND — производительность ухудшится, лучше генерировать вне листа или фиксировать значения.
- Требуется криптографическая случайность — Google Sheets не обеспечивает криптографического качества генератора.
Ментальные модели и heuristics
- Если нужно быстро — используйте RAND / RANDBETWEEN.
- Если нужно много раз сгенерировать и сохранить — генерируйте один раз и вставьте как значения.
- Если нужны большие объёмы или seed — используйте скрипт или внешние инструменты.
Шаблон: SOP для генерации тестового набора случайных данных
- Определить требования: тип чисел (целые/дробные), диапазон, количество строк/столбцов, необходимость воспроизводимости.
- Выбрать функцию: RAND / RANDBETWEEN / RANDARRAY или Apps Script.
- Сгенерировать данные в отдельном листе/диапазоне.
- Провести проверку качества (диапазон, допустимость значений, уникальность при необходимости).
- Зафиксировать данные: Правка → Специальная вставка → Только значения.
- Документировать источник и дату генерации.
Критерии приёмки
- Все значения лежат в заданном диапазоне.
- Формулы заменены значениями, если требуется стабилизация.
- При необходимости — отсутствие дубликатов (проверено UNIQUE/COUNTIF).
- В случае использования скриптов — код доступен и задокументирован.
Тестовые случаи (acceptance)
- Генерация 100 целых чисел от 1 до 10: проверить, что все числа в диапазоне и хотя бы одно повторение (ожидаемо).
- Генерация 50 дробных чисел между 0 и 1: проверить, что ни одно число не равно 1 и все ≥ 0.
- Генерация матрицы 10×5 через RANDARRAY: проверить размеры и отсутствие ошибок пересчёта.
Риск-матрица и рекомендации по смягчению
- Риск: медленный лист из-за множества волатильных функций. Смягчение: сгенерировать за пределами листа, затем вставить как значения.
- Риск: непреднамеренный пересчёт меняет тестовые данные. Смягчение: установить пересчёт по расписанию или использовать «Никогда» и вручную обновлять.
- Риск: использование для безопасности/ключей. Смягчение: не использовать для криптографии.
Роль‑ориентированные чек‑листы
- Для аналитика: определить диапазоны и точность, сгенерировать, проверить статистику (среднее, медиана, стандартное отклонение).
- Для тестировщика: зафиксировать seed/данные, сохранять версию набора, включить тесты воспроизводимости.
- Для разработчика (Apps Script): обеспечить код, логирование, обработку ошибок и тесты на границы.
Пример decision tree (выбор функции)
flowchart TD
A[Нужны случайные числа?] --> B{Целые или дробные}
B -->|Целые| C[RANDBETWEEN]
B -->|Дробные| D[RAND]
C --> E{Много значений?}
D --> E
E -->|Да| F[Использовать RANDARRAY или скрипт]
E -->|Нет| G[Использовать формулы в листе]
F --> H[Сохранить как значения при необходимости]
G --> HБезопасность и приватность
- Генерация случайных чисел в листах не связана с персональными данными. Тем не менее, при комбинировании с реальными данными следите за доступом к документу и аудитом изменений.
- Не используйте встроенные генераторы для криптографических ключей или токенов.
Часто задаваемые вопросы
Можно ли задать seed для RAND в Google Sheets?
Нет, встроенная функция RAND не поддерживает seed. Для детерминированности используйте Google Apps Script с реализацией генератора с seed.
Как сделать, чтобы случайные числа не пересчитывались?
Скопируйте диапазон и вставьте как значения либо измените в Настройках пересчёта опцию «Никогда» или «При изменениях» в зависимости от потребности.
Как получить случайные уникальные целые без повторов?
Метод: в отдельном столбце поставьте =RAND() рядом с диапазоном значений, отсортируйте по этом столбце, затем возьмите верхние N значений и вставьте как значения.
Заключение
Google Sheets предоставляет удобные встроенные инструменты для генерации случайных чисел: RAND для дробных значений, RANDBETWEEN для целых и RANDARRAY для массивов. Для производительности и воспроизводимости используйте копирование значений, Apps Script или внешние генераторы. Правильный выбор зависит от объёма данных, требований к воспроизводимости и критичности безопасности.
Ключевые рекомендации:
- Для быстрых задач используйте встроенные функции.
- Для больших объёмов или требующих seed — скрипты или внешние инструменты.
- Фиксируйте результаты при необходимости стабильности.
Похожие материалы
Как скопировать файлы на USB в Chromebook
Сделать Windows 10 похожей на macOS
PrintNightmare: патч KB5004945 и как защититься
Как запустить NES и SNES игры на Nintendo Wii
Частота DRAM: настройка и безопасный разгон