🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

Excel RANDARRAY — 数式 1 本で乱数のグリッドまるごと

|

Excel RANDARRAY — 数式 1 本で乱数のグリッドまるごと

TL;DRRANDARRAY([rows], [cols], [min], [max], [whole_number]) は Excel 365 の万能な乱数生成器です。RAND を千行ドラッグする代わりに、数式 1 本で乱数のブロック をまるごと スピル します。5 つの引数はすべて省略可能。裸の =RANDARRAY()RAND() と同じ挙動になります。小数と整数を分ける切り替えは最後の引数 whole_number で、その 既定は FALSE です — だから TRUE を明示的に渡さない限り 3.71 のような小数が返り ます。依然として 揮発性(編集のたびに振り直す)で、スピル するので、ふさがった 範囲では #SPILL! になります。

=RANDARRAY()                    ' -> 0.6218...   RAND() のように [0,1) の小数 1 つ
=RANDARRAY(5)                   ' -> 列方向に 5 個の小数をスピル
=RANDARRAY(5, 3)                ' -> 5×3 の小数グリッドをスピル
=RANDARRAY(5, 3, 1, 100, TRUE)  ' -> 1〜100 のランダムな整数の 5×3 グリッド
=SORTBY(A2:A20, RANDARRAY(ROWS(A2:A20)))   ' -> リストを数式 1 本でシャッフル

すでに RAND と RANDBETWEEN を知っているなら、RANDARRAY はその自然な次の一歩です。両方が行うことを、一度に領域まるごとに対して行い、しかも自分で サイズを合わせます。引っかかりどころは、引数の順序、こっそり潜んだ 1 つの既定値、そして — 動的配列である以上 — 下にあるものと衝突し得るという点です。

この記事で学べること

  • 考え方の軸:RANDARRAY は RAND + RANDBETWEEN をスピルしたもの
  • whole_number フラグの 既定が FALSE である理由 — 「なぜ小数になる?」の第 1 位
  • 引数の完全な順序、そして min/max が小数と整数で振る舞いを変えること
  • 依然として 揮発性 である理由、そしていつ #SPILL! を投げるのか
  • 決定打のコンボ:シャッフルの SORTBY(list, RANDARRAY(...))
  • RANDARRAY が 使えない とき(そして代わりに何を使うか)

考え方の軸:RAND と RANDBETWEEN をスピルしたもの

RAND は小数を 1 つ、RANDBETWEEN は整数を 1 つ与えます。どちらかで表を埋めるには、昔は 数式を一度書いて数百のセルにドラッグするしかありませんでした。RANDARRAY はそれを、スピル する 1 本の数式に畳み込みます — 形(行数・列数)と種類(範囲、整数かどうか)を伝えると、 ブロックまるごとを一度に塗ります。

これが発想のすべてです。古典的なサイコロの 両方 と、フィルダウンを 1 つに丸めた関数です。 =RANDARRAY(5, 3, 1, 100, TRUE) は「RANDBETWEEN(1,100) の 5×3 グリッドをくれ」、 =RANDARRAY(5, 3) は「RAND() の 5×3 グリッドをくれ」と読みます。「スピルする RAND / スピル する RANDBETWEEN」と見えれば、引数が恣意的に感じられなくなります。

引数 — そして全員を刺す FALSE の既定値

5 つの引数はすべて省略可能ですが、その 順序 は重要で、1 つの既定値がほぼ全員を驚かせ ます。

=RANDARRAY([rows], [cols], [min], [max], [whole_number])
  • rows, cols — スピルするブロックの形(既定は 1 × 1)。
  • min, max — 範囲(既定は 01)。整数を生成するときは両端が含まれます。
  • whole_number — 整数なら TRUE、小数なら FALSE既定:FALSE

この最後の既定こそ RANDARRAY 質問の第 1 位です。「1 から 100 までの数を頼んだのに 47.83 が 返ってきた — なぜ?」 それは max で止めて whole_number を渡さなかったからです。

=RANDARRAY(5, 1, 1, 100)         ' -> 47.83 のような小数(whole_number 省略 = FALSE)
=RANDARRAY(5, 1, 1, 100, TRUE)   ' -> 47 のような整数(whole_number = TRUE)

ルール:整数が欲しいなら、数式を必ず TRUE で締めくくること。 minmax を渡す だけでは 足りません — その範囲内の小数を平気で返します。これは整数専用の RANDBETWEEN とは 逆なので、RANDBETWEEN から移ってきた人は毎回引っかかります。(もう 1 つ、整数まわりで一目 おく価値のある点:whole_number が TRUE のとき、minmax 自体も整数でなければなりま せん。さもないと Excel は #VALUE! を返します — そして minmax より大きくても、また #VALUE! です。)

依然として揮発性で、依然としてスピルする

RANDARRAY は、動的配列の乱数を定義する 2 つの挙動をどちらも受け継ぎます。

  • 揮発性 — RAND や RANDBETWEEN と同じく、あらゆる 再計算のたびに振り直します。どこか の編集、F9、並べ替え、ファイルを開く、そのすべてです。結果を取っておきたいなら、同じ やり方で固定します。スピル範囲を選択し、コピーして、形式を選択して貼り付け → 値。 (左上のセルだけでなく、スピルした 範囲全体 を一度に固定してください。)
  • スピル — 入力したセルの下と右へ書き込みます。そのブロックに何かがすでに座っていると、 数ではなく #SPILL! エラーが出ます。障害物を取り除けば配列が現れます。
=RANDARRAY(1000, 1, 1, 100, TRUE)   ' 1 本の数式で 1000 セルを埋める…
                                     ' …が、再計算のたびに 1000 個すべてを振り直す

その揮発性は規模が大きいと侮れません。1000 セルの RANDARRAY は、ブックの他のどこかでキーを 1 つ叩くたびに全セルを再計算します。生きた what-if モデルならそれでよいのですが、確定した データセットなら、再計算が止まるように固定しましょう。

決定打のコンボ:SORTBY + RANDARRAY でリストをシャッフル

RANDARRAY の最も便利な使い道は、取っておく 数を生成することではありません — 並べ替えの キーにして 使い捨てる数を生成することです。SORTBY と組み 合わせれば、補助列なしで数式 1 本リストをシャッフルできます。

=SORTBY(A2:A20, RANDARRAY(ROWS(A2:A20)))       ' -> リストをランダムな順序に
=TAKE(SORTBY(A2:A20, RANDARRAY(ROWS(A2:A20))), 5)  ' -> 重複なしで 5 件のランダム標本

RANDARRAY(ROWS(...)) は行ごとにランダムキーを 1 つ作り、SORTBY はそのキーで行を並べ替え、 仕事を終えた瞬間にランダム性は消えます。各行が 別々の キーを受け取って単に並べ替えられる だけなので、何も重複しません — これこそ RANDBETWEEN では得られない非復元の挙動です。この パターンは ランダム抽出とサンプリング の背骨であり、 365 上でそれを 1 行にしてくれるのが RANDARRAY です。

判断のポイント

Excel 365 では、RANDARRAY が「RAND を 1000 行ドラッグ」を過去のものにします — 数式 1 本、 ドラッグ不要、データが増えれば自分でサイズを合わせます。乱数の ブロック やランダムな 並べ替えキーが必要なときは、いつでもこれに手を伸ばしましょう。頭に入れておくべきことは 2 つ だけ。whole_number = FALSE の既定(整数が欲しければ TRUE で締める)と、揮発性(結果が 確定した瞬間に値へ固定する)です。使わないほうがよい唯一の場面は互換性です。RANDARRAY は 動的配列関数なので、Excel 365 と Excel 2021 にしか存在しません — ブックを Excel 2019 以前 で動かす必要があるなら、RAND と RANDBETWEEN を昔ながらに フィルダウンする方式に戻します。

ExcelMaster が役立つ場面

FALSE の既定とスピルの仕組みは忘れやすいので、数式アシスタントに背負わせましょう。 ExcelMaster に「1 から 100 までのランダムな整数の 10×5 グリッド」を頼めば、 =RANDARRAY(10, 5, 1, 100, TRUE) を — あなたが落としがちな TRUE 付きで — 書き、#SPILL! を見ずに済むようスピル先を空の範囲へ向けます。「このリストをシャッフルして」や「25 行の ランダム標本を抜いて」と頼めば、SORTBY(..., RANDARRAY(...)) のコンボを組み立て、標本が 動かないよう出力を値へ固定することまで提案します。そしてあなたのファイルが古い Excel を 対象にしていると検知すれば、そこで実際に動く RAND ベースの方式へそっと切り替えます。

よくある質問

Excel の RANDARRAY 関数は何をしますか?

=RANDARRAY([rows], [cols], [min], [max], [whole_number]) はランダムな数のスピルした配列を 返します。引数なしなら RAND() のように [0, 1) の小数を 1 つ返し、rowscols を 与えるとブロックまるごとを埋め、minmax、そして whole_numberTRUE に設定すると そのブロックを範囲内のランダムな整数で埋めます。Excel 365 のオールインワン乱数生成器です。

RANDARRAY が整数ではなく小数を返すのはなぜですか?

whole_number 引数の既定が FALSE だからです。minmax を渡すと範囲が設定されるだけ で、整数を 強制しません。整数を得るには 5 番目の引数として TRUE を足す必要があります。 =RANDARRAY(5, 1, 1, 100, TRUE) です。それがないと、RANDARRAY は [min, max] 内の小数を 返します。

RANDARRAY は揮発性ですか? 再計算を止めるには?

はい — RAND や RANDBETWEEN と同じく、再計算のたびに振り直します。結果を取っておくには、 スピルした範囲全体を選択し、コピーして、形式を選択して貼り付け → 値 を実行します。これで 配列まるごとが、二度と変わらない静的な数に変換されます。

RANDARRAY が #SPILL! エラーになるのはなぜですか?

RANDARRAY は数式の下と右のセルへスピルする動的配列です。それらのセルにすでにデータが入って いると、Excel はスピルできず #SPILL! を表示します。スピル範囲をふさいでいるものを消すか 移動すれば、配列が現れます。

RANDARRAY でリストをシャッフルしたり、ランダム標本を取ったりするには?

ランダムキーで並べ替えます。=SORTBY(range, RANDARRAY(ROWS(range))) はリストをランダムな 順序で返し、=TAKE(SORTBY(range, RANDARRAY(ROWS(range))), n) は重複なしで n 件のランダム 標本を取ります。Excel でランダムに選ぶ・抽出する・シャッフルする方法 を参照してください。

検証環境

検証環境: Excel 365 (Windows 11) — 最終確認 2026-07-11。

関連ガイド: Excel RAND & RANDBETWEEN · ランダム抽出とサンプリング · Excel SORT & SORTBY · Excel TAKE & DROP