Excelで乱数を作るには?ランダムな数値や並び替えを簡単に行う方法

Excel

「くじ引きの順番を決めたい」「シミュレーション用にランダムな数を作りたい」「サンプルデータを効率的に生成したい」「統計分析のためのテストデータが必要」

そんなときに便利なのが、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: 乱数の生成

  1. 必要な範囲に乱数関数を入力
  2. 数式をコピーして全体に適用

Step 2: 値として固定

  1. 乱数が入力された範囲を選択
  2. Ctrl+C でコピー
  3. 右クリック →「形式を選択して貼り付け」
  4. 「値」を選択してOK

結果

  • 数式が数値に変換される
  • 以降、計算更新で値が変わらない

一部だけ固定する方法

混在パターンの作成

A列:固定された乱数
B列:変動する乱数(関数のまま)
C列:固定された乱数

IF関数を使った条件付き固定

特定条件での乱数生成

基本的な考え方

=IF(条件, RAND(), 0)

実用例:平日のみランダム売上

=IF(WEEKDAY(A2,2)<=5, RANDBETWEEN(10000,50000), 0)

一度だけ実行される乱数

=IF(B2="", RAND(), B2)

ランダムな並び替え(シャッフル)

基本的なシャッフル方法

名前リストのシャッフル

手順

  1. A列に名前リスト入力
  2. B列に =RAND() を入力
  3. B1をB列の最後までコピー
  4. A列とB列を選択
  5. 「データ」→「並べ替え」
  6. B列を「昇順」で並べ替え

結果 A列の名前がランダムな順序に並び替えられます

より効率的な方法

RANDARRAY関数(Microsoft 365)

=SORTBY(A2:A10, RANDARRAY(ROWS(A2:A10)))

この数式一つで、リストをランダムに並び替えできます。

複数列の同時シャッフル

関連データを維持したシャッフル

データ例

A列:名前
B列:年齢
C列:部署

手順

  1. D列に =RAND() を追加
  2. A:D列全体を選択
  3. D列でソート(昇順)
  4. 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(バリューアットリスク)の計算

  1. 1000回以上のシミュレーションを実行
  2. 結果を昇順でソート
  3. 下位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生成、グループ分け、抽選

効果的な活用のポイント

計画段階

  1. 目的の明確化:何のために乱数が必要か
  2. 分布の選択:一様分布 vs 正規分布 vs その他
  3. 固定 vs 動的:値を固定するかリアルタイム更新するか

実装段階

  1. 適切な関数選択:連続値 vs 離散値
  2. 範囲の設定:現実的で意味のある範囲
  3. 品質確認:生成された乱数の統計的性質を確認

運用段階

  1. パフォーマンス管理:大量データでの処理速度
  2. 再現性の確保:必要に応じてシード値の管理
  3. セキュリティ考慮:用途に応じた適切な乱数品質

コメント

タイトルとURLをコピーしました