指定された平均値と標準偏差に基づいてExcelで乱数を生成する
指定された平均値と標準偏差を持つ乱数のセットを生成することは、統計シミュレーション、アルゴリズムのテスト、または金融、工学、教育分野でのプロセスモデリングにおける一般的な要件です。しかし、Excelにはこのような特定の平均値と標準偏差に応じた乱数リストを直接生成する組み込み関数は提供されていません。特定の特性に統計的に一致するランダムなテストデータを頻繁に作成する必要がある場合、その方法を理解することでワークフローの効率とデータの品質を大幅に向上させることができます。
このチュートリアルでは、指定した平均値と標準偏差に基づいて乱数を生成するための実用的な方法を紹介します。詳細なステップバイステップの手順、数式パラメータの説明、エラー防止やトラブルシューティングのための専門的なヒントを提供します。さらに、このプロセスを自動化したり大規模なデータセットを効率的に生成したいユーザー向けにVBAマクロソリューションも提供します。
VBAコード - 指定された平均値と標準偏差を持つ乱数を生成する
指定された平均値と標準偏差に基づいて乱数を生成する
Excelでは、標準関数を組み合わせることで、目的の平均値と標準偏差に合致する乱数のセットを作成できます。小規模から中規模のデータセットや迅速かつアドホックなニーズに適した解決策として、以下の手順に従ってください。
1. まず、ターゲットとなる平均値と標準偏差を2つの別々の空セルに入力します。整理しやすくするために、必要な平均値をセルB1、必要な標準偏差をセルB2に使用するとしましょう。スクリーンショットをご覧ください:
2. 最初のランダムデータを作成するため、セルB3に次の数式を入力します:
=NORMINV(RAND(),$B$1,$B$2)
数式を入力後、フィルハンドルをドラッグして必要な行数だけ埋めてください。各セルは指定された平均値と標準偏差に基づいて値を生成します。
ヒント: 数式 =NORMINV(RAND(),$B$1,$B$2) 内で:
- RAND() は、ワークシートが再計算されるたびに0から1の間で異なるランダム確率を生成します。
- $B$1 は指定された平均値を指します。
- $B$2 は指定された標準偏差を指します。
=NORM.INV(RAND(),$B$1,$B$2)
を使用することを考えるとよいでしょう。これは機能的には同じですが、更新された関数名を反映しています。 3. 生成された数値があなたの意図した平均値と標準偏差に統計的に一致していることを確認するため、以下の数式を使用して生成されたサンプルの実際の値を計算します。セルD1で、次のようにしてサンプル平均を計算します:
=AVERAGE(B3:B16)
D2では、次のようにしてサンプルの標準偏差を計算します: =STDEV.P(B3:B16)


ヒント:
- B3:B16は例としての範囲です。ステップ2で生成した乱数の数に応じて調整してください。
- より大きなランダムサンプルでは、大数の法則により、実際の平均値と標準偏差が指定値に近づきます。
4. シリーズをさらに調整して正確な目標平均値と標準偏差に一致させるため、初期の乱数値を正規化します。セルD3に次の数式を入力します:
=$B$1+(B3-$D$1)*$B$2/$D$2
フィルハンドルをドラッグして、乱数のあるすべての行まで埋めます。この数式は初期値を標準化し、B1およびB2の平均値と標準偏差に正確に合わせます。
ヒント:
- B1は指定された平均値です。
- B2は指定された標準偏差です。
- B3は元の乱数値です。
- D1はこれらの元の乱数値の平均です。
- D2はこれらの元の乱数値の標準偏差です。
これで、最終的な値のセットが要件を満たしていることを確認できます。品質保証および文書作成のために、平均値と標準偏差を再計算してください。
5. セルD17で、次の数式を使用して最終的な乱数セットの平均値を計算します:
=AVERAGE(D3:D16)
次に、セルD18で以下の数式を使用して標準偏差を計算します: =STDEV.P(D3:D16)

ヒント: D3:D16は最終的な乱数の範囲を指します。
トラブルシューティング:
- #VALUE! エラーが表示される場合、参照されているすべてのセル範囲を再度確認し、空白または無効なセルを参照していないか確認してください。
- 数式が再計算するたびに変更され続ける場合、最終的な乱数を選択し、コピーして「形式を選択して貼り付け」>「値」を使ってさらなる更新を防ぎます。
- Excelのランダムジェネレーターは再計算に依存するため、一貫性が重要である場合は静的な結果を保存する必要があります。
VBAコード - 指定された平均値と標準偏差を持つ乱数を生成する
大量のランダムデータを迅速に生成する必要があり、特に繰り返し、自動化、または高ボリュームが必要な場合、VBAマクロは時間節約につながる解決策を提供します。一度の実行で、フルデータセットをワークブックに直接作成でき、手動による反復や数式のコピー間違いを最小限に抑えることができます。
このアプローチは以下の場合に適しています:
- シミュレーション、ストレス試験、または教育デモ用のランダムデータセットを自動生成する場合。
- 出力フォーマットを最小限の手動操作で標準化したい場合。
- ExcelのVBAエディタの使用に慣れているユーザー。
数式方式と比較すると、VBAは動的な調整や複雑なワークフローとの統合を可能にしますが、マクロが有効になっていることや、「マクロ対応」の.xlsm形式で明示的に保存する必要があることに注意してください。
1. Excelリボン上で「開発ツール」をクリックします(表示されていない場合は、「ファイル」>「オプション」>「リボンのユーザー設定」で有効にします)。次に「Visual Basic」を選択します。「Visual Basic for Applications」ウィンドウで、「挿入」>「モジュール」をクリックし、次のコードを空のモジュールウィンドウにコピーします:
Sub GenerateRandomNumbersWithMeanStd()
Dim outputRange As Range
Dim meanValue As Double, stdDevValue As Double
Dim numItems As Long, i As Long
Dim xTitleId As String
On Error Resume Next
xTitleId = "KutoolsforExcel"
Set outputRange = Application.InputBox("Select the output range", xTitleId, Type:=8)
meanValue = Application.InputBox("Enter the mean value", xTitleId, "", Type:=1)
stdDevValue = Application.InputBox("Enter the standard deviation", xTitleId, "", Type:=1)
If outputRange Is Nothing Or meanValue = 0 Or stdDevValue = 0 Then
MsgBox "Please ensure you have specified all required parameters.", vbExclamation, "KutoolsforExcel"
Exit Sub
End If
numItems = outputRange.Count
Randomize
For i = 1 To numItems
outputRange.Cells(i).Value = Application.WorksheetFunction.NormInv(Rnd, meanValue, stdDevValue)
Next i
End Sub
2をクリックします。 実行 ボタン(または F5を押す)ことでマクロを起動します。ダイアログボックスが表示され、乱数を出力したい範囲を選択します(例えば、A1:A100を選択して100個の値を得る)。次に、希望する平均値と標準偏差を入力します。マクロは指定に基づいた乱数で範囲を埋めます。
ヒントとトラブルシューティング:
- VBAは正規分布の数値を生成するためにExcelの
NormInv
関数を使用します — お使いのバージョンがこれをサポートしているかどうか常に確認してください。古いExcelバージョンでは、関数はNORMINV
である可能性があります。 Randomize
を使用してランダムシードを設定し、毎回異なる結果を得られます。- 再現可能な結果が必要な場合は、
Randomize
行をコメントアウトするか削除します。 - マクロは選択された出力範囲内の既存のデータを上書きするため、必要な場合は空のエリアを選んでください。
- 不適切な値(例えば、負またはゼロの標準偏差)を入力した場合、マクロは進行せず警告メッセージが表示されます。
関連記事:
最高のオフィス生産性ツール
🤖 | Kutools AI Aide:データ分析を革新:インテリジェント実行 | コード生成 | カスタム数式の作成 | データを分析してグラフを生成 | Kutools Functions を呼び出す… |
人気機能:重複の検索・ハイライト・マーキング | 空白行を削除 | データを失わず列やセルを統合 | 丸める ... | |
スーパーLOOKUP:複数条件VLOOKUP | 複数値VLOOKUP | 複数シートの検索 | ファジーマッチ .... | |
高度なドロップダウンリスト:すばやくドロップダウンリストを作成 | 依存型ドロップダウンリスト | 複数選択ドロップダウンリスト .... | |
列の管理:特定数の列を追加 | 列を移動 | 非表示列の表示状態を切り替え | 範囲と列の比較 ... | |
注目機能:グリッドフォーカス | デザインビュー | 強化された数式バー | ワークブック&ワークシートの管理 | オートテキスト ライブラリ (Auto Text) | 日付ピッカー | データの統合 | セルの暗号化/復号化 | リスト送信で電子メールを送信 | スーパーフィルター | 特殊フィルタ(太字/斜体/取り消し線でフィルタ...) | |
トップ15ツールセット:12 種類のテキストツール(テキストの追加、特定の文字を削除など) | 50 種以上のグラフ タイプ(ガントチャートなど) | 40を超える実用的な 数式(誕生日に基づいて年齢を計算する、など) | 19種の 挿入ツール(QRコードの挿入、パスから画像の挿入など) | 12種類の 変換ツール(単語に変換する、通貨変換など) | 7つの 結合&分割ツール(高度な行のマージ、セルの分割など) | ...さらに多数 |
Kutools for ExcelでExcelスキルを強化し、かつてない効率を体験しましょう。 Kutools for Excelは300以上の高度な機能で生産性向上と時間短縮を実現します。最も必要な機能を今すぐ取得...
Office TabはOfficeにタブ表示を追加し、作業効率を大幅に向上させます
- Word、Excel、PowerPointでタブ編集とタブ閲覧を有効にします
- 同じウィンドウ内の新しいタブで複数のドキュメントを開いたり作成したりできます。新しいウィンドウを開く必要はありません。
- 生産性が50%向上し、1日に何百回ものマウスクリックも削減できます!