TL;DR — Excel に組み込まれた乱数生成の手段は 2 つです。
RAND()は0以上1未満(1には決して届かない)のランダムな小数を返し、RANDBETWEEN(bottom, top)はbottomからtopまでの範囲で、両端を含む ランダムな 整数 を返します。あらゆる「驚き」を説明する事実はただ 1 つ。どちらも 揮発性(volatile) — 編集のたび、F9を押すたび、ファイルを開くたびに 新しい 数を振り直します。「乱数が勝手に変わる」のはバグではなく、そういう設計なのです。固定 したいなら 「コピー → 形式を選択して貼り付け → 値」。そして RANDBETWEEN は値を 繰り返します — サイコロを振っているのであって、カードを配っているのではありません。
=RAND() ' -> 0.4173... [0, 1) の小数
=RANDBETWEEN(1, 6) ' -> 4 1〜6 の整数、両端を含む
=RANDBETWEEN(-10, 10) ' -> -3 負の範囲でも問題なし
=50 + (100 - 50) * RAND() ' -> 73.9 [50, 100) のランダムな小数
=ROUND(50 + 50*RAND(), 2) ' -> 82.14 小数第 2 位までのランダムな価格
Excel で乱数を 1 つ作るのは 1 行で済みます。本当に人がつまずくのは、その乱数を コントロールする ほう — 他のどこかに触れた瞬間に振り直されるのを止めること、そして 「ランダムな整数」と「ランダムな 標本」がまったく別の仕事だと理解することです。揮発性 の仕組みと固定のコツさえ押さえれば、この一角はまるごと予測可能になります。
この記事で学べること
- 考え方の軸:RAND と RANDBETWEEN は 生きたサイコロ であって、保存された値ではない
- 揮発性 が「乱数が勝手に変わる」の原因第 1 位である理由
- 乱数を 固定 して動かなくする方法(形式を選択して貼り付け → 値)
RANDBETWEENが 繰り返す 理由 — 両端を含む、復元抽出- 任意の範囲でランダムな 小数 を作る
=a+(b-a)*RAND()のパターン - 揮発性の乱数がこっそり 大きなモデルを重くする 場面 — そしてその対処
考え方の軸:生きたサイコロであって、保存された数ではない
ほとんどの Excel 関数は何かを検索するか、固定の答えを計算します — 2 回聞けば同じ答えが 返ります。乱数関数はそうではありません。それぞれが、シートが再計算されるたびに Excel が 振り直すサイコロ なのです。セルは数を 保持している のではなく、「いま 1 回振れ」という 指示を保持しています。この 1 点の発想の転換が、以下すべてを説明します。
RAND() は引数を取らず、半開区間 [0, 1) の一様な小数を返します — 0 はあり得ますが、1
はあり得ません。RANDBETWEEN(bottom, top) は bottom から top までの整数を返し、そして
— ここを読み違える人が多いのですが — 両端が含まれます。ですから RANDBETWEEN(1, 6) は
本当に 1 も 6 も返し得ます。取り得る結果の数は top − bottom + 1 です(サイコロなら 5
ではなく 6 通り)。
乱数で組み立てるものはすべて、この 2 つのサイコロを形を変えて使っているにすぎません。任意 の範囲へ引き伸ばす小数のサイコロか、ID・サンプルデータ・サイコロゲームのために振る整数の サイコロか、そのどちらかです。
揮発性が落とし穴 #1:編集のたびに振り直される
A1 に =RANDBETWEEN(1, 100) と入力し、次に A2 に自分の名前を打って Enter を押してみて
ください。A1 を見ると — 変わっています。触っていないのに、再計算を引き起こしたからです。
そして 揮発性 の関数は、あらゆる 再計算 — どこかを編集する、F9 を押す、並べ替える、
行を挿入する、ブックを開き直す — のたびに振り直します。
=RAND() ' 再計算のたびに新しい数 — 編集のたび、F9 のたび、ファイルを開くたび
=RANDBETWEEN(1,100) ' 同様:生きた数式である限り、じっとしていない
RAND / RANDBETWEEN に関するほぼすべての不満の根っこがこれです — 「ランダムに割り当てた はずが勝手にシャッフルされる」「コピーする前に数が変わった」「開くたびに標本が違う」。 どれ 1 つとして誤動作ではありません。 サイコロがサイコロの仕事をしているだけです。問題は あなたがそれを 生きたまま にしたいのか(オンデマンドで振り直すべき what-if モデル)、 固定 したいのか(取っておく必要のある標本)だけです。その判断が次の節です。
乱数を固定して動かなくする方法
一連の乱数を 取っておきたい とき — 当選者が決まった、標本が選ばれた — は、生きた数式を 静的な値に変換します。Excel には乱数シードがないので、結果を再現可能にする唯一の方法が この固定です。
=RAND()/=RANDBETWEEN(...)の入ったセルを選択します。- コピー(
Ctrl+C)。 - 同じ選択範囲に 形式を選択して貼り付け → 値(
Ctrl+Alt+V→V)。
数式はただの数になり、二度と振り直されません。単一セルなら、数式バーで数式を選択して F9
を押し、リテラルに焼き付けることもできます。
ルール:生きた数式で抽選し、抽選が確定した瞬間に値へ固定する。 次のキー入力で音もなく 変わってしまうランダムな結果は、メールで送る・監査する・それを根拠に動くといった用途では 役に立つどころか有害です — 「あとでコピーすればいい」は、別の誰かが最初にファイルを開いて Excel が読み込み時に振り直した時点で破綻します。
RANDBETWEEN は繰り返す:サイコロを振るのであって、カードを配るのではない
ここが実害を生む誤解です。人は RANDBETWEEN(1, 500) で 500 個の一意な ID を割り当てよう
としたり、50 行に敷き詰めて「ランダムに 50 人を選ぼう」としたりして、値が重複することに
面食らいます。
=RANDBETWEEN(1, 500) ' 500 行に敷き詰め -> 重複は確実に発生する
RANDBETWEEN は 復元抽出 です。1 回ごとの振りは独立していて、毎回すべての範囲が使える — まさに 4 が 2 回続けて出得るサイコロと同じです。誕生日問題 の数学によれば、重複は直感よりずっと早く現れます — 1〜100 のサイコロをたった 12 回振れば、 衝突が起こるほうが起こらないより高確率です。
だから判断の線ははっきりしています。
- 繰り返しが許される(サイコロ、模擬的な評価、サンプルのテストデータ)→
RANDBETWEENが正解。 - すべての結果が別々である必要がある(一意な当選者、非復元 の行標本、リストの シャッフル)→ RANDBETWEEN は まったくの誤用。それは 抽出 の問題であり、各行に ランダムなキーを付けて並べ替えることで解けます — Excel でランダムに選ぶ・抽出する・シャッフルする方法 を参照してください。
一意性を無理に確保しようと IF(COUNTIF(...)) のガードを RANDBETWEEN に積み重ねるのは、
間違った関数を使っていることへの脆いパッチにすぎません。代わりに「ランダムキーで並べ替え」
のパターンに手を伸ばしましょう。
任意の範囲のランダムな小数:=a+(b-a)*RAND() のパターン
RANDBETWEEN は整数しか作れません。ですから、ランダムな価格を RANDBETWEEN(50, 100)/1
(整数のみ)や RANDBETWEEN(5000, 10000)/100(1 セット刻みに丸まり、わずかに偏る)で得よう
とする発想は、間違った関数への回避策です。連続した ランダム値には RAND() を引き伸ばし
ます。
=a + (b - a) * RAND() ' [a, b) の一様な小数
=50 + (100 - 50) * RAND() ' -> [50, 100) のどこかの小数
=ROUND(50 + 50*RAND(), 2) ' -> 上と同じものを、実際の価格に丸めたもの
=TODAY() + RANDBETWEEN(0, 30) ' -> 今後 30 日間のランダムな日付
このパターンは考え方の軸に沿って読み解けます。RAND() は 0 から 1 までの道のりの何分の一
かを与え、幅 (b − a) を掛けるとその割合があなたの範囲に拡大され、a を足すと正しい起点へ
スライドします。きれいな小数や通貨が必要なら ROUND で包み
ます。この 1 つの数式が、単なる整数ではない「X と Y の間のランダムな数」をすべてカバー
します。
判断のポイント
RAND と RANDBETWEEN の使い分けは簡単なほうです — 小数なら RAND、整数なら RANDBETWEEN、
任意の範囲の小数なら a+(b-a)*RAND() の引き伸ばし。 本当に重要な判断は、構文ではなく
状態 についてのものです。まず 1 つ目:このサイコロは生きたままにすべきか、固定すべきか。
数が意思決定を支えるなら、ただちに値へ固定します — 固定していない標本は次の再計算を生き
延びられませんし、監査には到底耐えません。2 つ目:繰り返しが必要か否か。RANDBETWEEN は
平気で繰り返すので、タスクに「一意」「非復元の標本」という言葉が現れた瞬間に、それを積み
重ねるのをやめて「ランダムキーで並べ替え」の手法に切り替えます。この 2 つの判断を外さなけ
れば、Excel の乱数はあなたと喧嘩しなくなります。
ExcelMaster が役立つ場面
揮発性と繰り返しの罠は、まさに数式アシスタントが肩代わりすべき類のものです。
ExcelMaster に「60 から 100 までのランダムなテストの点数を 50 個ください」と伝えれば、
正しい生成式を書き、さらに結果を値へ固定して振り直しを止めることまで提案します。「50 ドル
から 99.99 ドルの間のランダムな価格」と頼めば、偏った整数のハックではなく
=ROUND(50+49.99*RAND(),2) に手を伸ばします。そして「20 人のランダムな顧客を、重複なしで」
のように、本当に 別々の 結果が必要なものを頼めば、それが抽出の仕事だと見抜き、あとで手作業
で重複を除く羽目になる RANDBETWEEN ではなく、「ランダムキーで並べ替え」の数式を組み立てます。
よくある質問
Excel の RAND 関数とは何ですか?
=RAND() は、0 以上 1 未満で一様に分布するランダムな小数を返します。引数は取りません。
揮発性 なので、ワークシートが再計算されるたび — どこかを編集したとき、F9 を押したとき、
ファイルを開き直したとき — に新しい値を生成します。任意の範囲 [a, b) の小数が欲しいときは
=a+(b-a)*RAND() を使います。
RANDBETWEEN はどう動きますか? 両端は含まれますか?
=RANDBETWEEN(bottom, top) は bottom から top までのランダムな整数を返し、両端を
含みます — =RANDBETWEEN(1, 6) は 1, 2, 3, 4, 5, 6 のいずれも返し得ます。範囲は負でも
かまいません(=RANDBETWEEN(-10, 10))。RAND と同じく揮発性で、再計算のたびに振り直します。
Excel で乱数が勝手に変わり続けるのはなぜですか?
RAND と RANDBETWEEN が 揮発性関数 だからです — ほぼどんな操作(セルの編集、F9、並べ
替え、ブックを開き直す)でも引き起こされる再計算のたびに、新しいランダム値を生成します。
変わるのを止めるには静的な値へ変換します。セルを選択し、コピーして、形式を選択して貼り
付け → 値 を実行します。
乱数が再計算されないようにするには?
値へ固定します。ランダムな数式が入ったセルを選択し、Ctrl+C を押し、同じ範囲に 形式を
選択して貼り付け → 値(Ctrl+Alt+V → V)で上書きします。セルは二度と振り直されない
固定の数になります。単一セルなら、数式バーをクリックして数式を選択し、F9 を押すと
リテラル値に変換できます。
重複なしで乱数を生成するには?
RANDBETWEEN は使わないでください — 復元抽出なので繰り返します。別々のランダム値や非復元の
標本が欲しいときは、各項目にランダムキーを付けて並べ替えます。例えば
=SORTBY(list, RANDARRAY(ROWS(list))) でシャッフルし、その上位 N 件を取ります。
Excel でランダムに選ぶ・抽出する・シャッフルする方法
を参照してください。
検証環境
検証環境: Excel 365 (Windows 11) — 最終確認 2026-07-11。
関連ガイド: Excel RANDARRAY · ランダム抽出とサンプリング · Excel ROUND · 重複しない値を数える
