Excel で割り当てられた確率に基づいてランダムな値を生成するには?
Excel を使用していると、特定の基礎となる確率を反映したランダム値を生成する必要が時折生じます。たとえば、以下のスクリーンショットのように、いくつかの可能な結果とその関連確率を示したテーブルがあると仮定します。
このようなシナリオは、ビジネスシミュレーション、プロジェクトモデリング、教育目的などでよく見られ、ランダム選択がデータに基づく確率や頻度を正確に反映できるようにしたい場合に該当します。
代表的な要件とユースケースは以下の通りです。
- アンケート回答や顧客の選択をシミュレーションする際、特定の回答や選択肢がより高い確率で選ばれるようにしたい場合。
- 確率の概念を教える際に、テスト用データセットやランダム抽選を生成する場合。
- 各選択肢に既知の確率が設定されている選択プロセスを自動化する場合。
- ゲームデザインやリスク分析において、結果に特定の確率分布が必要な場合。
以下では、Excel で割り当てられた確率に基づいてランダム値を生成するためのいくつかの方法をご紹介します。標準的な数式ベースの手法、高度な VBA による自動化、そしてExcel に内蔵された「分析ツールパック」の活用法を含みます。
確率に基づいてランダム値を生成する
Excel では、指定された確率に従ってランダムな値を生成するためのシンプルな数式ベースのソリューションを提供しています。この方法は素早くタスクをこなすのに最適で、ワークシート内で完結し、特別な設定は一切不要です。
開始前に、値を1 列(A2:A8)にリストし、その隣の列(B2:B8)に対応する確率(0 から1 の間の小数)を入力してください。正確性を確保するため、確率の合計が1 になるようにしてください。このソリューションは、管理しやすい規模の値を持つテーブルに最適です。
1。 隣接する列(C2 から開始)に、次の数式を入力して累積確率を計算します。
=SUM($B$2:B2) 次に、この数式をすべての値に適用するまで下方向にドラッグします。これにより、各値に対して累積範囲が作成され、乱数を特定の結果にマッピングするのに役立ちます。
2。 任意の空白セル(例:D2)に次の数式を入力し、確率分布に基づくランダム値を取得してください。
=INDEX(A$2:A$8,COUNTIF(C$2:C$8,"<="&RAND())+1) Enter キーを押すと、ランダム値が表示されます。F9 キーを押して再計算するか、ワークシートのデータが変更されるたびに、新しい結果が表示されます。F9
ヒントと注意点:
- 列 B の確率は、公平な分布を保証するため、合計が正確に1(パーセンテージ表記の場合は100%)になるようにしてください(ただし、数式内では小数に変換すること)。
- この手法は短いリストに最適です。数十〜数百もの値がある場合は、パフォーマンスが低下し、メンテナンスも困難になります。
- 複数回のランダム選択を繰り返す必要がある場合(たとえば、シミュレーション結果のバッチを作成する際など)、最終的な数式を下方向または横方向の範囲にコピーするだけで済みます。
- 空白行や範囲の不一致には十分ご注意ください。これらはエラーを引き起こしたり、予期しない結果を招いたりする可能性があります。
エラーの注意点:#REF! や #VALUE! エラーが発生した場合は、累積確率の列が値の範囲と一致していること、およびすべての確率が有効な数値であることをご確認ください。

KUTOOLS AI でExcel の魔法を解き放ちましょう
- スマート実行:セル操作、データ分析、チャート作成をすべてシンプルなコマンドで実現します。
- カスタム数式:ワークフローの効率化に役立つ、あなただけのカスタマイズ数式を生成します。
- 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 の操作は元に戻せませんので、マクロを実行する前に必ず作業内容を保存しておきましょう。
関連記事:
最高の Office 業務効率化ツール
| 🤖 | KUTOOLS AI アシスタント:次に基づいてデータ分析を革新します:インテリジェント実行 | コード生成| カスタム数式作成 | データ分析とチャート生成| 拡張機能呼び出し… |
| 人気の機能:検索・ハイライト、または重複をマーキング | 空白行を削除する | データを失うことなく列の結合またはセルを | 数式を使用しない四捨五入... | |
| スーパー LOOKUP:複数条件 VLookup | 複数値 VLookup | 複数シート間 VLookup | ファジーマッチ.... | |
| 高度なドロップダウンリスト:ドロップダウンリストをすばやく作成 | 連動型ドロップダウンリスト | 複数選択可能なドロップダウンリスト.... | |
| 列マネージャー:指定した数の列を追加|列の移動|非表示列の表示状態を切り替え|範囲および列の比較... | |
| 注目の機能:グリッドフォーカス | デザインビュー |強化された数式バー | ワークブックとシートマネージャー | リソースライブラリ(オートテキスト)| 日付ピッカー | ワークシートの統合 | 暗号化/セルの復号化 | リストからメール送信 | スーパーフィルター | 特殊フィルタ(太字のフォントを持つセルをフィルタリング/斜体/取り消し線。。。) 。。。 | |
| トップ15 ツールセット:12 テキストツール(テキストの追加、特定の文字を削除、...)| 50+チャートタイプ(ガントチャート、...)| 40+実用的関数(誕生日に基づいて年齢を計算します、...)| 19 挿入ツール(QR コードを挿入、パスから画像を挿入、...)| 12 変換ツール(単語に変換する、為替レートの変換、...)| 7 結合と分割ツール(高度な行のマージ、セルの分割、...)|さらに多数 |
Kutools for Excel でExcel スキルを強化し、これまでにない効率を体験しましょう。Kutools for Excel は、生産性を高め、時間を大幅に節約できる高度な機能を300 以上提供します。最も必要な機能を今すぐ入手するにはこちらをクリック。。。
Office Tab は Office にタブインターフェースをもたらし、作業を大幅に簡単にします
- Word、Excel、PowerPoint でタブを使った編集と閲覧を有効にします。Publisher、Access、Visio、Project でもご利用いただけます。
- 複数のドキュメントを、新しいウィンドウではなく、同じウィンドウ内の新しいタブで開いたり作成したりできます。
- 日々の生産性を50%も向上させ、毎日数百回ものマウスクリックを削減します!
すべてのKutools アドインが、たった1 つのインストーラーで完結。
Kutools for Officeスイートには、Excel ・Word ・Outlook ・PowerPoint 用のアドインと Office Tab Pro が含まれており、複数の Office アプリを横断して作業するチームに最適です。
- オールインワンスイート— Excel、Word、Outlook、PowerPoint 用アドイン+Office Tab Pro
- インストーラー1 つ、ライセンス1 つ— 数分でセットアップ可能(MSI 対応)
- 連携してさらにパワーアップ— Office アプリ全体で生産性が向上
- 30 日間のフル機能トライアル— 登録不要、クレジットカード不要
- 最高のお得感— 個別アドイン購入よりお得