Как сгенерировать случайное значение в Excel на основе заданной вероятности?
При работе в Excel иногда требуется генерировать случайные значения, отражающие определённые базовые вероятности. Например, предположим, что у вас есть таблица с перечнем возможных исходов и соответствующими им вероятностями, подобная приведённой ниже на снимке экрана.
Такой сценарий часто используется в бизнес-моделировании, проектировании и обучении, когда важно, чтобы случайный выбор точно отражал вероятность или частоту, заданную вашими данными.
Типичные задачи и случаи использования:
- Моделирование ответов на опросы или выбора клиентов, при котором некоторые варианты ответов имеют более высокую вероятность.
- Создание тестовых наборов данных или случайных выборок для освоения основ теории вероятностей.
- Автоматизация процессов выбора, где вероятность каждого варианта известна.
- Разработка игр и анализ рисков, где исходы должны соответствовать заданным вероятностным распределениям.
Ниже представлены несколько способов генерации случайных значений с учётом заданных вероятностей в Excel — от стандартных формул и встроенной надстройки «Анализ данных» до расширенной автоматизации с помощью VBA.
➤ VBA: Генерация случайных значений с заданными вероятностями
Генерация случайного значения с учётом вероятности
Excel предлагает удобное решение на основе формул для генерации случайных значений с учётом заданных вероятностей. Этот метод идеально подходит для быстрых задач, полностью работает прямо на листе и не требует дополнительной настройки.
Перед началом работы убедитесь, что ваши значения перечислены в одном столбце (A2:A8), а соответствующие им вероятности (выраженные десятичными дробями от 0 до 1) — в следующем столбце (B2:B8). Сумма вероятностей должна быть равна 1 для обеспечения точности. Это решение идеально подходит для таблиц с разумным количеством значений.
1.In an adjacent column (beginning at C2), введите следующую формулу для вычисления накопленных (кумулятивных) вероятностей:
=SUM($B$2:B2) Затем протяните эту формулу вниз, чтобы охватить все ваши значения. Так вы создадите кумулятивные диапазоны для каждого значения, которые позволят сопоставить случайное число с конкретным исходом.
2.В любой пустой ячейке (например, D2) введите приведённую ниже формулу, чтобы получить случайное значение на основе вашего вероятностного распределения:
=INDEX(A$2:A$8,COUNTIF(C$2:C$8,"<="&,RAND())+1) Нажмите Enter, чтобы отобразить случайное значение. Каждый раз при нажатии F9 (для пересчёта) или при изменении данных на листе будет появляться новый результат.
Советы и меры предосторожности:
- Вероятности в столбце B должны в сумме составлять ровно 1 (или 100 %, если используются проценты; однако для формул их необходимо преобразовать в десятичные дроби), чтобы обеспечить корректное распределение.
- Этот метод идеально подходит для коротких списков. Однако при наличии десятков или сотен значений производительность может снизиться, а обслуживание — стать затруднительным.
- Если нужно повторить случайный выбор несколько раз (например, чтобы сформировать набор смоделированных результатов), просто скопируйте итоговую формулу в диапазон ниже или рядом.
- Будьте внимательны при работе с пустыми строками и несоответствующими диапазонами — это может привести к ошибкам или неожиданным результатам.
Напоминание об ошибках: Если появляется ошибка #ССЫЛ! или #ЗНАЧ!, убедитесь, что длина столбца кумулятивных вероятностей совпадает с количеством значений и что все вероятности являются корректными числами.

Раскройте магию Excel с помощью KUTOOLS AI
- Интеллектуальное выполнение: Выполняйте операции с ячейками, анализируйте данные и создавайте диаграммы — всё это доступно через простые команды.
- Пользовательские формулы: создавайте индивидуальные формулы для оптимизации рабочих процессов.
- Программирование на VBA: Пишите и внедряйте код VBA легко и без усилий.
- Анализ формул: Легко разбирайтесь даже в самых сложных формулах.
- Перевод текста: Ломайте языковые барьеры прямо в ваших таблицах.
VBA: Генерация случайных значений с заданными вероятностями
Для пользователей, которым нужна высокая степень автоматизации или требуется сгенерировать большой объём случайных значений (например, тысячи выборок), Excel VBA предлагает практичное решение — более быстрое и гибкое по сравнению с формулами на листе. Этот подход особенно эффективен при работе с крупными наборами данных или при массовой генерации случайных результатов для моделирования.
1.Перейдите в Инструменты разработчика>Visual Basic, затем в окне VBA выберите Вставка>Модульи вставьте следующий код в модуль:
Sub GenerateRandomWithProbability()
Dim rngValues As Range
Dim rngProbs As Range
Dim n As Long
Dim i As Long
Dim cumProbs() As Double
Dim valList() As Variant
Dim randNum As Double
Dim resultRange As Range
Dim idx As Long
' On Error, ignore
On Error Resume Next
xTitleId = "KutoolsforExcel"
' Select values
Set rngValues = Application.InputBox("Select values range", xTitleId, Type:=8)
' Select probabilities
Set rngProbs = Application.InputBox("Select probabilities range", xTitleId, Type:=8)
' Number of random values to generate
n = Application.InputBox("Number of random values to generate", xTitleId, "10", Type:=1)
' Where to output
Set resultRange = Application.InputBox("Select output start cell", xTitleId, Type:=8)
If rngValues.Rows.Count <> rngProbs.Rows.Count Then
MsgBox "Values and probabilities range must be the same size.", vbExclamation
Exit Sub
End If
ReDim cumProbs(1 To rngValues.Count)
ReDim valList(1 To rngValues.Count)
' Calculate cumulative probabilities
cumProbs(1) = rngProbs.Cells(1, 1).Value
valList(1) = rngValues.Cells(1, 1).Value
For i = 2 To rngValues.Count
cumProbs(i) = cumProbs(i - 1) + rngProbs.Cells(i, 1).Value
valList(i) = rngValues.Cells(i, 1).Value
Next i
' Generate random results
For i = 1 To n
randNum = Rnd
For idx = 1 To UBound(cumProbs)
If randNum <= cumProbs(idx) Then
resultRange.Cells(i, 1).Value = valList(idx)
Exit For
End If
Next idx
Next i
End Sub 2. В окне VBA нажмите кнопку
запуска, чтобы выполнить код. Далее последовательно выберите: диапазон значений, диапазон вероятностей, количество генерируемых случайных значений и начальную ячейку для вывода. Макрос мгновенно заполнит целевые ячейки случайными значениями в соответствии с заданными вами вероятностями.
- Этот процесс можно повторять для больших наборов данных, а столбец с результатами — настроить на любом листе.
- Если сумма вероятностей в вашем диапазоне значительно отличается от 1, распределение может оказаться искажённым — всегда проверяйте исходные данные.
- Это решение идеально подходит для автоматизированной выборки, моделирования и воспроизводимого пакетного генерирования.
Советы: Храните значения и вероятности в смежных и чётко выровненных диапазонах. Обязательно сохраняйте документ перед запуском макросов — действия VBA невозможно отменить с помощью команды «Отменить».
Связанные статьи:
- Как сгенерировать в Excel случайные числа без повторений?
- Как сохранить или остановить изменение случайных чисел в Excel?
- Как в Excel сгенерировать случайный ответ «Да» или «Нет»?
Лучшие инструменты повышения продуктивности в Office
Раскройте весь потенциал Excel с помощью Kutools для Excel и ощутите эффективность как никогда раньше.Kutools для Excel предлагает более 300 расширенных функций для повышения продуктивности и Экономия времени.Нажмите здесь, чтобы получить нужную Вам функцию…
Office Tab добавляет в Office вкладки и значительно упрощает Вашу работу
- Включите редактирование и чтение во вкладках в Word, Excel, PowerPoint, Publisher, Access, Visio и Project.
- Открывайте и создавайте несколько документов во вкладках одного окна — вместо того чтобы использовать отдельные окна.
- Повышает вашу продуктивность на 50 % и экономит сотни кликов мышью каждый день!
Все надстройки Kutools — один установщик
Kutools for Office — набор надстроек для Excel, Word, Outlook и PowerPoint, а также Office Tab Pro, идеально подходящий командам, работающим с разными приложениями Office.
- Единый комплект— надстройки для Excel, Word, Outlook и PowerPoint + Office Tab Pro
- Один установщик, одна лицензия— настройка занимает считанные минуты (готово для MSI)
- Лучше работать вместе— оптимизированная продуктивность во всех приложениях Office
- 30-дневная полнофункциональная пробная версия— без регистрации и кредитной карты
- Лучшее соотношение цены и качества— экономия по сравнению с покупкой отдельных надстроек