「くじ引きの順番を決めたい」「シミュレーション用にランダムな数を作りたい」「サンプルデータを効率的に生成したい」「統計分析のためのテストデータが必要」
そんなときに便利なのが、Excel(エクセル)の乱数機能です。でも実際にやってみようとすると、「どうやって乱数を出すの?」「毎回変わるのが困る…」「思った通りの範囲で数値が出ない」など、意外とつまずきやすいポイントがあります。
実は、Excelの乱数機能は非常に強力で、基本的なランダム数値生成から、複雑な統計分析まで幅広く活用できます。適切に使いこなせば、業務効率が大幅に向上し、データ分析の精度も高められます。
この記事では、Excelで乱数を作る基本の方法から、実用的な応用テクニック、よくある問題の解決方法まで、初心者でもすぐに実践できる内容をわかりやすく紹介します。
乱数の基礎知識

乱数とは何か
乱数の定義 乱数とは「ランダムな数」のことで、予測不可能で規則性のない数値の列を指します。コンピュータで生成される乱数は、厳密には「擬似乱数」と呼ばれ、数学的なアルゴリズムによって生成されます。
Excelでの乱数活用場面
業務での活用
データ分析
- サンプルデータの生成
- モンテカルロシミュレーション
- 統計的検定のためのテストデータ
- 予測モデルのバリデーション
管理業務
- 抽選システムの構築
- ランダムサンプリング
- 順番決めや割り当て
- セキュリティ用のランダムID生成
学習・研究での活用
統計学習
- 確率分布の理解
- 大数の法則の実証
- 中心極限定理の確認
- 回帰分析のシミュレーション
数学的モデリング
- 確率過程のシミュレーション
- リスク分析
- 最適化問題の解析
- ゲーム理論の実験
基本的な乱数関数
RAND関数
基本的な使い方
構文
=RAND()
特徴
- 0以上1未満の小数をランダムに生成
- 引数は不要
- 計算が実行されるたびに値が変わる
生成例
0.527384925
0.891047382
0.234759283
0.657293847
応用的な使い方
特定範囲の小数生成
=RAND() * (最大値 - 最小値) + 最小値
例:1から10の小数
=RAND() * 9 + 1
例:-5から5の小数
=RAND() * 10 - 5
RANDBETWEEN関数
基本的な使い方
構文
=RANDBETWEEN(最小値, 最大値)
例
=RANDBETWEEN(1, 100) # 1から100の整数
=RANDBETWEEN(-10, 10) # -10から10の整数
=RANDBETWEEN(1000, 9999) # 4桁の整数
より詳しい活用例
サイコロのシミュレーション
=RANDBETWEEN(1, 6)
年齢データの生成
=RANDBETWEEN(20, 65)
売上データの生成
=RANDBETWEEN(100000, 500000)
乱数の固定化テクニック
値貼り付けによる固定
基本的な手順
Step 1: 乱数の生成
- 必要な範囲に乱数関数を入力
- 数式をコピーして全体に適用
Step 2: 値として固定
- 乱数が入力された範囲を選択
- Ctrl+C でコピー
- 右クリック →「形式を選択して貼り付け」
- 「値」を選択してOK
結果
- 数式が数値に変換される
- 以降、計算更新で値が変わらない
一部だけ固定する方法
混在パターンの作成
A列:固定された乱数
B列:変動する乱数(関数のまま)
C列:固定された乱数
IF関数を使った条件付き固定
特定条件での乱数生成
基本的な考え方
=IF(条件, RAND(), 0)
実用例:平日のみランダム売上
=IF(WEEKDAY(A2,2)<=5, RANDBETWEEN(10000,50000), 0)
一度だけ実行される乱数
=IF(B2="", RAND(), B2)
ランダムな並び替え(シャッフル)

基本的なシャッフル方法
名前リストのシャッフル
手順
- A列に名前リスト入力
- B列に
=RAND()
を入力 - B1をB列の最後までコピー
- A列とB列を選択
- 「データ」→「並べ替え」
- B列を「昇順」で並べ替え
結果 A列の名前がランダムな順序に並び替えられます
より効率的な方法
RANDARRAY関数(Microsoft 365)
=SORTBY(A2:A10, RANDARRAY(ROWS(A2:A10)))
この数式一つで、リストをランダムに並び替えできます。
複数列の同時シャッフル
関連データを維持したシャッフル
データ例
A列:名前
B列:年齢
C列:部署
手順
- D列に
=RAND()
を追加 - A:D列全体を選択
- D列でソート(昇順)
- D列は削除
結果 名前、年齢、部署の対応関係を保ったままランダムに並び替え
条件付きシャッフル
グループ内でのシャッフル
部署別のランダム配置
=RAND() + MATCH(B2, 部署リスト, 0) * 1000
この方法で、同じ部署内でのみランダムに並び替えができます。
特殊な乱数生成テクニック
正規分布の乱数
BOX-MULLER法の実装
標準正規分布(平均0、標準偏差1)
=SQRT(-2*LN(RAND()))*COS(2*PI()*RAND())
任意の正規分布
=平均 + 標準偏差 * SQRT(-2*LN(RAND()))*COS(2*PI()*RAND())
実用例:テストスコアの生成
平均70点、標準偏差10の正規分布
=70 + 10 * SQRT(-2*LN(RAND()))*COS(2*PI()*RAND())
重み付き乱数
基本的な重み付け
不均等な確率での選択
=IF(RAND()<0.7, "A", IF(RAND()<0.9, "B", "C"))
この例では:
- A: 70%の確率
- B: 20%の確率
- C: 10%の確率
より複雑な重み付け
CHOOSE関数との組み合わせ
=CHOOSE(
IF(RAND()<0.5, 1, IF(RAND()<0.8, 2, 3)),
"高頻度", "中頻度", "低頻度"
)
相関のある乱数
相関係数を指定した乱数生成
2つの変数間に相関を持たせる
X = RAND()
Y = 相関係数 * X + SQRT(1-相関係数^2) * RAND()
実用例:売上と広告費の相関
広告費 = RANDBETWEEN(10, 100)
売上 = 広告費 * 5 + RANDBETWEEN(-50, 50)
実用的な応用例
データ分析用サンプル作成
顧客データの生成
顧客マスタのサンプル
顧客ID: ="C" & TEXT(ROW()-1, "0000")
年齢: =RANDBETWEEN(20, 70)
性別: =IF(RAND()<0.5, "男性", "女性")
年収: =RANDBETWEEN(300, 1000) * 10000
売上データの生成
月次売上データ
基準売上: 1000000
季節変動: =基準売上 * (1 + 0.2 * SIN(MONTH(A2)*PI/6))
ランダム変動: =季節変動 * (1 + (RAND()-0.5)*0.3)
A/Bテスト用データ
テストグループの割り当て
ランダムグループ分け
=IF(RAND()<0.5, "A", "B")
3グループに分割
=IF(RAND()<0.33, "A", IF(RAND()<0.67, "B", "C"))
結果データの生成
コンバージョン率のシミュレーション
グループA: =IF(RAND()<0.05, "成約", "未成約")
グループB: =IF(RAND()<0.07, "成約", "未成約")
モンテカルロシミュレーション
投資リターンのシミュレーション
年次リターンの生成
=NORM.INV(RAND(), 平均リターン, 標準偏差)
ポートフォリオ価値の計算
=前年度価値 * (1 + 年次リターン)
リスク分析
VaR(バリューアットリスク)の計算
- 1000回以上のシミュレーションを実行
- 結果を昇順でソート
- 下位5%点を特定
よくある問題と解決方法

乱数が期待通りに生成されない
RAND関数で整数が欲しい場合
間違った方法
=RAND()*100 # 小数が出てしまう
正しい方法
=RANDBETWEEN(1, 100) # 整数が出る
範囲指定の間違い
よくある間違い
=RANDBETWEEN(1, 10.5) # エラーになる
解決方法
=RANDBETWEEN(1, 10) # 整数で指定
乱数が更新されすぎる問題
計算のたびに変わってしまう
問題
- セルを編集するたびに乱数が変わる
- ファイルを開くたびに値が変わる
解決方法1:手動計算モード
数式タブ → 計算方法 → 手動
必要な時だけF9で再計算
解決方法2:値貼り付けで固定
乱数生成 → コピー → 値貼り付け
パフォーマンスの問題
大量の乱数で処理が重い
問題
- 数万行の乱数でExcelが重くなる
- 計算に時間がかかりすぎる
解決策
1. 手動計算モードに変更
2. 必要最小限の範囲のみ乱数を使用
3. VBAで一括生成後、値として固定
VBAでの高速乱数生成
Sub FastRandomGeneration()
Dim i As Long
Dim dataArray() As Double
' 配列に乱数を生成
ReDim dataArray(1 To 10000, 1 To 1)
For i = 1 To 10000
dataArray(i, 1) = Rnd()
Next i
' 一括でシートに貼り付け
Range("A1:A10000").Value = dataArray
End Sub
高度な乱数テクニック
種(シード)の設定
再現可能な乱数の生成
VBAでの実装
Sub SetRandomSeed()
Randomize 12345 ' 種を固定
' この後のRnd()は同じ順序で値を生成
End Sub
日付をシードにする方法
Sub DateBasedSeed()
Randomize CLng(Date)
' 日付ベースの再現可能な乱数
End Sub
カスタム分布の生成
指数分布
=-LN(RAND())/λ
一様分布以外の離散分布
重み付きランダム選択
=INDEX(選択肢, MATCH(RAND(), 累積確率範囲, 1))
乱数の品質検定
基本的な統計検定
平均値の確認
=AVERAGE(乱数範囲) # 0.5に近いか確認
分散の確認
=VAR(乱数範囲) # 約1/12 ≈ 0.083
連続性の検定
ラン検定の簡易版
=COUNTIF(乱数範囲,">0.5")/COUNT(乱数範囲)
セキュリティと暗号用途

セキュアな乱数の必要性
パスワード生成
英数字ランダム文字列
=CHAR(RANDBETWEEN(65,90)) & CHAR(RANDBETWEEN(97,122)) & RANDBETWEEN(0,9)
ランダムID生成
数字とアルファベットの組み合わせ
=CONCATENATE(
CHAR(RANDBETWEEN(65,90)),
RANDBETWEEN(100,999),
CHAR(RANDBETWEEN(65,90))
)
暗号学的強度の考慮
Excelの限界
注意点
- Excelの乱数は暗号学的に安全ではない
- 重要なセキュリティ用途には専用ツールを使用
- 擬似乱数のため、予測可能性がある
まとめ
Excelの乱数機能は、データ分析からシミュレーション、日常業務まで幅広い場面で活用できる強力なツールです。
主要な関数と用途
RAND関数
- 用途:連続的な確率分布、シャッフル、シミュレーション
- 特徴:0以上1未満の小数を生成
- 応用:正規分布など他の分布の基礎
RANDBETWEEN関数
- 用途:整数の乱数、離散的な選択、サンプリング
- 特徴:指定範囲の整数を生成
- 応用:ID生成、グループ分け、抽選
効果的な活用のポイント
計画段階
- 目的の明確化:何のために乱数が必要か
- 分布の選択:一様分布 vs 正規分布 vs その他
- 固定 vs 動的:値を固定するかリアルタイム更新するか
実装段階
- 適切な関数選択:連続値 vs 離散値
- 範囲の設定:現実的で意味のある範囲
- 品質確認:生成された乱数の統計的性質を確認
運用段階
- パフォーマンス管理:大量データでの処理速度
- 再現性の確保:必要に応じてシード値の管理
- セキュリティ考慮:用途に応じた適切な乱数品質
コメント