目次
このチュートリアルでは、乱数の生成、リストのランダムソート、ランダム選択、グループへのデータのランダム割り当てを紹介します。 すべて新しい動的配列関数であるRANDARRAYを使用します。
ご存知のように、Microsoft ExcelにはすでにRANDとRANDBETWEENという2つのランダム化関数があります。 なぜ、別の関数を導入するのか? 一言で言えば、この関数がはるかに強力で、古い関数を置き換えることができるからです。 最大値と最小値を設定する以外に、行と列を埋める数、ランダムに小数を生成するかどうかを指定することができ、さらに、RANDとRANDBETWEENは、ランダムな小数を生成することができます。RANDARRAY は他の関数と一緒に使うことで、データをシャッフルしたり、ランダムにサンプルを選んだりすることもできます。
Excel RANDARRAY関数
ExcelのRANDARRAY関数は、指定した任意の2つの数値の間にある乱数の配列を返します。
Microsoft Excel 365で新たに導入された6つの動的配列関数の1つで、指定した行数、列数に自動的にはみ出す動的配列になります。
この関数は次のような構文になっています。 すべての引数はオプションであることに注意してください。
RANDARRAY([rows], [columns], [min], [max], [whole_number])どこで
列 (オプション) - 塗りつぶす行数を定義します。 省略された場合、デフォルトは1行になります。
コラム (オプション) - 塗りつぶす列数を定義します。 省略された場合、デフォルトは1列となります。
最小 (オプション) - 生成する最小の乱数。 指定しない場合は、デフォルトの0が使用されます。
マックス (オプション) - 作成する最大の乱数。 指定しない場合は、デフォルトの1が使用されます。
整数 (オプション) - どのような種類の値を返すかを決定します。
- 真 - 整数
- FALSE または省略(デフォルト) - 10進数
RANDARRAY関数 - 覚えておくとよいこと
Excelのワークシートで効率的に乱数を発生させるには、6つの重要なポイントに注意する必要があります。
- RANDARRAY関数は、Excel for Microsoft 365およびExcel 2021でのみ使用できます。 Excel 2019、Excel 2016およびそれ以前のバージョンでは、RANDARRAY関数は使用できません。
- RANDARRAY が返す配列が最終結果(セルに出力され、他の関数に渡されない)である場合、Excel は自動的に動的な流出範囲を作成し、そこに乱数を入力します。 したがって、式を入力するセルの下または右に十分な空きセルがあることを確認してください。そうしないと、#SPILL エラーが発生します。
- 引数を指定しない場合、RANDARRAY()式は0から1の間の単一の10進数で返します。
- もし 漕ぎ手 又は コラムス 引数が10進数で表現される場合,小数点以下の数字は切り捨てられます(例えば,5.9は5として扱われます)。
- もし ミニ または マックス 引数が定義されていない場合、RANDARRAYのデフォルトはそれぞれ0と1である。
- 他のランダム関数と同様、ExcelのRANDARRAYは 揮発性 これは、ワークシートが計算されるたびに新しいランダムな値のリストを生成することを意味します。 これを防ぐには、数式を値で置き換えるために、Excelの ペースト・スペシャル > 価値観 機能を搭載しています。
Excelの基本的なRANDARRAYの計算式
そして、次に、最もシンプルな形で、ランダムなExcelの数式をお見せしましょう。
5行3列からなる範囲を任意の乱数で埋めたいとします。 これを実行させるには、最初の2つの引数をこのように設定します。
- 列 は、5行の結果が欲しいので、5です。
- コラム は3列で結果を表示したいので3です。
他の引数はすべて初期値のままにして、次の式を得ます。
=randarray(5, 3)
目的の範囲(ここではA2)の左上のセルに入力し、Enterキーを押すと、指定した行数、列数に渡って結果が表示されます。
上のスクリーンショットにあるように、この基本的なRANDARRAY式は、0から1までのランダムな10進数で範囲を埋めます。もし、特定の範囲内の整数を取得したい場合は、さらなる例で示したように、最後の3つの引数を設定します。
Excelでランダム化する方法 - RANDARRAY式の例
以下では、Excelでの典型的なランダム化のシナリオをカバーするいくつかの高度な数式を紹介します。
2つの数値の間に乱数を発生させる
特定の範囲の乱数リストを作成するには、第3引数に最小値、第4引数に最大値を指定します。 整数か小数のどちらを必要とするかによって、第5引数にそれぞれTRUEまたはFALSEを指定します。
例として、6行4列の範囲に1から100までのランダムな整数を入力することにします。 このために、RANDARRAY関数の引数を次のように設定します。
- 列 は、6行の結果が欲しいので、6です。
- コラム は4列で結果を表示したいので4です。
- 最小 は1であり、これは我々が望む最小値である。
- マックス は100であり、これが生成される最大値である。
- 整数 が TRUE になるのは、整数が必要だからです。
議論をまとめると、こんな式になる。
=randarray(6, 4, 1, 100, true)
そして、次のような結果を得ることができます。
2つの日付の間のランダムな日付を生成する
Excelでランダムな日付ジェネレータをお探しですか? RANDARRAY関数を使えば、簡単に解決できます!あらかじめ定義されたセルに早い日付(日付1)と遅い日付(日付2)を入力し、数式でそれらのセルを参照するだけです。
RANDARRAY(rows, columns, デートワン , 日付2 TRUE)この例では、D1とD2の日付の間にあるランダムな日付のリストをこの計算式で作成しました。
=randarray(10, 1, d1, d2, true)
もちろん、最小値と最大値を直接数式で指定してもかまいません。 ただし、Excelが理解できるようなフォーマットで入力してください。
=randarray(10, 1, "1/1/2020", "12/31/2020", true)
日付の入力は、間違いを防ぐためにDATE機能を使うとよいでしょう。
=randarray(10, 1, date(2020,1,1), date(2020,12,31), true)
注)Excelでは内部的に日付を通し番号で管理しているため、計算式の結果は数字で表示されることがほとんどです。 結果を正しく表示するためには、Excelに 日付 フォーマットを、流出範囲内のすべてのセルに適用します。
Excelでランダムな勤務日を生成する
ランダムな営業日を作り出すには、WORKDAYの第1引数にRANDARRAY関数を次のように埋め込む。
WORKDAY(RANDARRAY(rows, columns, デートワン , 日付2 TRUE), 1)RANDARRAYは、ランダムな開始日の配列を作成し、WORKDAY関数はそれに1勤務日を追加して、返される日付がすべて勤務日であることを確認します。
D1に日付1、D2に日付2があるとして、平日10日のリストを作成する計算式を以下に示します。
=workday(randarray(10, 1, d1, d2, true), 1)
前の例と同様に、流出範囲の書式を覚えておいてください。 日付 をクリックすると、結果が正しく表示されます。
重複のない乱数を生成する方法
最近のExcelには6つの動的配列関数が追加されていますが、残念ながら、重複のない乱数を返す関数はまだ搭載されていません。
自作する場合 いちげんてきらんすうはっせいき の場合、以下のようにいくつかの関数を連結する必要があります。
ランダムな整数 :
index(unique(randarray( n *2, 1, ミニ , マックス , true)), sequence( n ))ランダム小数点 :
index(unique(randarray( n *2, 1, ミニ , マックス false)), sequence( n ))どこで
- N は、生成したい値の数です。
- 最小 が最低値です。
- マックス が最高値です。
例えば、重複のないランダムな整数を10個生成するには、次の式を使用します。
=index(unique(randarray(20, 1, 1, 100, true))), sequence(10))
10個のユニークなリストを作成するには 乱数十進数 RANDARRAY関数の最後の引数でTRUEをFALSEに変更するか、この引数を単に省略します。
=index(unique(randarray(20, 1, 1, 100, false))), sequence(10))
ヒントと注意点
- 計算式の詳しい説明は、Excelで重複のない乱数を生成する方法にあります。
- Excel 2019 以前のバージョンでは、RANDARRAY 関数は使用できません。 代わりに、こちらの解決策をご確認ください。
エクセルでランダムに並べ替える方法
Excel でデータをシャッフルするには、「並べ替え」の配列に RANDARRAY を使用します ( by_array(バイアレイ ROWS関数は、データセットの行数をカウントし、生成する乱数の個数を示します。
SORTBY(ソートバイ) データ , randarray(rows( データ )))このアプローチで、あなたは ランダムソート は、数字、日付、テキストのいずれを含む場合でも、Excelで使用することができます。
=sortby(a2:a13, randarray(rows(a2:a13)))
また、以下のようなことも可能です。 シャッフルロー データを混ぜることなく
=sortby(a2:b10, randarray(rows(a2:b10)))
Excelでランダムな選択範囲を取得する方法
リストから無作為にサンプルを抽出するには、以下のような一般的な計算式を使用します。
INDEX( データ , RANDARRAY( n , 1, 1, ROWS( データ ), TRUE))どこ n は、抽出したいランダムなエントリーの数です。
例えば、A2:A10のリストからランダムに3人の名前を選ぶには、次の式を使用します。
=index(a2:a10, randarray(3, 1, 1, rows(a2:a10), true))
または、あるセル、例えばC2に希望するサンプルサイズを入力し、そのセルを参照します。
=index(a2:a10, randarray(c2, 1, 1, rows(a2:a10), true))
この処方の仕組み
この式の核となるのがRANDARRAY関数で、C2の値で生成する値の個数を定義し、整数のランダム配列を作成します。 最小値はハードコード(1)、最大値はデータセットの行数に対応し、ROWS関数で返されます。
ランダムな整数の配列は、そのまま 行番号 INDEX関数の引数で、返す項目の位置を指定します。 上のスクリーンショットのサンプルでは、こうなっています。
=index(a2:a10, {8;7;4})
ヒント:小さなデータセットから大きなサンプルを選ぶとき、ランダムな選択には同じ項目が複数含まれる可能性があります。 これを防ぐには、この式の重複のないバージョンを使用します。
Excelでランダムな行を選択する方法
データセットに複数の列が含まれている場合、サンプルに含める列を指定します。 このためには、最後の引数に配列定数 ( 列番号 )のINDEX関数を、次のようにします。
=index(a2:b10, randarray(d2, 1, 1, rows(a2:a10), true), {1,2})
ここで、A2:B10 はソースデータ、D2 はサンプルサイズである。
その結果、ランダムな選択には2列のデータが含まれることになります。
ヒント:前の例と同様に、この式は重複したレコードを返すことがあります。 サンプルに繰り返しがないことを確認するには、「重複のないランダムな行を選択する方法」で説明した少し異なる方法を使用してください。
Excelで数字やテキストをランダムに割り当てる方法
Excelでランダム割付を行うには、このようにRANDBETWEENとCHOOSE関数を併用します。
どこで
- データ は、ランダムな値を割り当てたいソースデータの範囲です。
- N は、割り当てる値の総数です。
- 値1 , 値2 , 値3 などは、ランダムに割り当てられる値です。
例えば、A2:A13の参加者に1~3の番号を割り当てるには、以下の計算式を使用します。
=choose(randarray(rows(a2:a13), 1, 1, 3, true), 1, 2, 3)
便利なことに、割り当てる値を D2 から D4 のように別々のセルに入力し、数式でそれらのセルを参照することができます(範囲としてではなく、個々に)。
=choose(randarray(rows(a2:a13), 1, 1, 3, true), d2, d3, d4)
その結果、同じ計算式で任意の数字、文字、テキスト、日付、時刻をランダムに割り当てることができるようになります。
注意:RANDARRAY関数は、ワークシートを変更するたびに新しいランダムな値を生成し続け、その結果、毎回新しい値が割り当てられます。 割り当てられた値を「修正」するには、数式をその計算値で置き換える貼り付け特殊機能> 値の機能を使用します。
この式の仕組み
このソリューションの中心は、やはり RANDARRAY 関数で、指定した最小値と最大値(この例では 1 から 3 まで)に基づく乱数整数の配列を生成します。 ROWS 関数は、RANDARRAY に生成する乱数の数を伝えます。 この配列が インデックスナンバー の引数で指定します。
=choose({1;2;1;2;3;2;3;3;1;3;1;2}, d2, d3, d4)
インデックス番号 は、返す値の位置を決める引数です。 位置はランダムなので、D2:D4の値はランダムな順番で選ばれます。 そう、とてもシンプルなのです :)
データをグループにランダムに割り当てる方法
参加者をグループにランダムに割り当てる場合、上記の計算式ではグループが何回選ばれるかを制御できないため、適切でない場合があります。 たとえば、グループAには5人、グループCには2人しか割り当てられないということもあり得ます。 ムラなく のように、各グループの参加人数が同じになるようにするには、別の解決策が必要です。
まず、この式で乱数のリストを生成する。
=randarray(rows(a2:a13))
A2:A13はソースデータです。
そして、この一般的な計算式を使ってグループ(あるいは他のもの)を割り当てるのです。
INDEX( 値を割り当てる , 丸め(ランク( 最初の乱数 , ランダムな数値の範囲 )/ n , 0))どこ n はグループサイズ、すなわち各値が割り当てられるべき回数である。
例えば、E2:E5のグループに、各グループ3人ずつランダムに参加させる場合、次の式を用います。
=index($e$2:$e$5, roundup(ランク(b2,$b$2:$b$13)/3,0))である。
これは通常の数式(動的配列の数式ではありません!)なので、上記の数式のように絶対参照で範囲を固定する必要があることに注意してください。
一番上のセル(この例ではC2)に数式を入力し、必要な数だけセルまでドラッグします。 結果はこのように表示されます。
RANDARRAY関数は揮発性であることを忘れないでください。 ワークシートの何かを変更するたびに新しいランダムな値が生成されるのを防ぐには、数式をその値で置き換えるために、以下のようにします。 ペースト・スペシャル 機能を搭載しています。
この処方の仕組み
ヘルパー欄のRANDARRAYの式は非常にシンプルで、ほとんど説明の必要がないので、C欄の式に注目しましょう。
=index($e$2:$e$5, roundup(ランク(b2,$b$2:$b$13)/3,0))である。
RANK関数は、B2の値をB2:B13の乱数配列に対してランク付けします。 その結果は、1から参加者の総数(この例では12)までの数字となります。
ランクをグループサイズ(この例では3)で割ると、ROUNDUP関数で最も近い整数に切り上げられます。 この演算の結果は、1からグループ総数(この例では4)までの数字になります。
に整数が行く。 行番号 INDEX関数の引数で、割り当てられたグループを表すE2:E5の範囲内の対応する行から値を返すように強制します。
ExcelのRANDARRAY関数が動作しない
RANDARRAY式がエラーを返した場合、これらを確認するのが最も分かりやすい理由です。
#SPILLエラー
他の動的配列関数と同様に、#SPILL! エラーは、ほとんどの場合、意図した流出範囲にすべての結果を表示するのに十分なスペースがないことを意味します。 この範囲のセルをすべてクリアすれば、数式は自動的に再計算されます。 詳細については、Excel #SPILL エラー - 原因と修正方法をご覧ください。
#VALUEエラー
このような場合、#VALUE!エラーが発生することがあります。
- がある場合 マックス の値より小さい。 ミニ の値を設定します。
- 引数のいずれかが数値以外である場合。
#NAMEエラー
多くの場合、#NAME! のエラーは、以下のいずれかを示しています。
- 関数名のスペルを間違えている。
- お使いのExcelのバージョンでは、この関数は使用できません。
#CALC!エラー
の場合、#CALC!エラーが発生します。 漕ぎ手 または コラムス 引数が1より小さいか、空白のセルを指している場合。
以上、新しいRANDARRAY関数を使ってExcelで乱数発生器を作る方法でした。 読んでくださってありがとうございました!また来週のブログでお会いしましょう。
練習用ワークブック(ダウンロード
RANDARRAYの計算式の例(.xlsxファイル)