目次
このチュートリアルでは、Excelで繰り返しのないランダムサンプリングを行う方法に焦点を当てます。 Excel 365、Excel 2021、Excel 2019およびそれ以前のバージョンに対応した解決策が記載されています。
以前、Excelで無作為に選択するいくつかの方法を紹介しました。 これらの方法のほとんどは、RAND関数とRANDBETWEEN関数に依存しており、重複した数値を生成する可能性があります。 その結果、無作為抽出には繰り返しの値が含まれる場合があります。 重複のない無作為抽出が必要な場合、このチュートリアルで説明する方法を使用してください。
重複のないリストからのExcelランダム選択
動的配列に対応したExcel 365およびExcel 2021でのみ動作します。
繰り返しのないリストからランダムに選択するには、次の一般的な数式を使用します。
INDEX(SORTBY()の場合 データ , randarray(rows( データ )), SEQUENCE( n ))どこ n は希望する選択サイズです。
例えば、A2:A10のリストから5つのユニークなランダム名を得るには、次のような数式を使用します。
=index(sortby(a2:a10, randarray(rows(a2:a10))), sequence(5))
便宜上、サンプルサイズをあらかじめ定義されたセル、例えばC2に入力し、SEQUENCE関数にセルリファレンスを供給することができます。
=index(sortby(a2:a10, randarray(rows(a2:a10)))、sequence(c2))
この処方の仕組み
RANDARRAY関数で乱数の配列を作成し、SORTBYで元の値をその数でソートし、INDEXでSEQUENCEで指定された数だけ値を取得するという式のロジックを大まかに説明する。
詳細な内訳は以下のとおりです。
ROWS関数は、データセットに含まれる行数をカウントしてRANDARRAY関数に渡すので、同じ数のランダムな小数点を生成することができます。
乱数配列
このランダムな小数の配列は、SORTBY関数のsort by配列として使用されます。 その結果、元のデータはランダムにシャッフルされます。
ランダムにソートされたデータから、特定のサイズのサンプルを取り出すために、シャッフルされた配列をINDEX関数に与え、最初の N SEQUENCE 関数を使用すると、1 から 10 までの数値のシーケンスを生成します。 N 元データはすでにランダムな順序でソートされているので、どの位置を取り出すかはあまり気にせず、量だけを問題にします。
Excelで重複のないランダムな行を選択する
動的配列に対応したExcel 365およびExcel 2021でのみ動作します。
繰り返しのないランダムな行を選択するには、このように数式を作成します。
INDEX(SORTBY()の場合 データ , randarray(rows( データ )), SEQUENCE( n ), {1,2,...})どこ n はサンプルサイズ、{1,2,...}は抽出する列番号である。
例として、F1 のサンプルサイズに基づいて、A2:C10 から重複のないランダムな行を選択してみましょう。 データは 3 列なので、この配列定数を式に与えます: {1,2,3}...
=index(sortby(a2:c10, randarray(rows(a2:c10))), sequence(f1), {1,2,3})
そして、次のような結果を得る。
この処方の仕組み
この式は、前の式とまったく同じロジックで動作します。 大きな違いを生む小さな変更点は、この式で指定するのは 行番号 と 列番号 INDEX関数の引数を指定します。 行番号 はSEQUENCEから供給され 列番号 を配列定数で指定します。
エクセル2010でランダムサンプリングを行う方法 - 2019年
動的配列に対応しているのは、Excel for Microsoft 365とExcel 2021のみなので、これまでの例で使用した動的配列関数はExcel 365でのみ動作します。 他のバージョンでは、別の解決策を講じる必要があります。
A2:A10のリストからランダムに選択したい場合、2つの別々の数式で行うことができます。
- Rand式で乱数を生成します。 我々の場合、B2に入力し、B10にコピーダウンしています。
=RAND()
- E2 に入力する以下の計算式で最初の乱数値を抽出する。
=index($a$2:$a$10, rank.eq(b2、$b$2:$b$10)+countif($b$2:b2, b2) - 1)
- 上記の数式を、ランダムに選びたい値の数だけセルにコピーします。 この例では、4つの名前が欲しいので、E2からE5まで数式をコピーします。
完了!重複のないランダムなサンプルは次のようになります。
この処方の仕組み
最初の例と同様に、INDEX関数を使用して、ランダムな行番号に基づいてA列から値を取得します。 違いは、これらの番号を取得する方法です。
RAND 関数は、B2:B10 の範囲をランダムな小数で埋めます。
RANK.EQ関数は、任意の行の乱数の順位を計算します。 例えば、E2においてRANK.EQ(B2, $B$2:$B$10) は、B2の数値をB2:B10のすべての数値に対して順位付けします。 E3にコピーすると、相対参照のB2がB3に変化してB3における数値の順位、といったように返されます。
COUNTIF関数は、上記のセルに指定された数値がいくつ現れるかを調べる関数です。 例えば、E2では、COUNTIF($B$2:B2, B2)は、B2という一つのセルだけを調べ、1を返します。 E5では、数式はCOUNTIF($B$2:B5, B5)に変わり、B5にB2と同じ数値があるので2を返します(なお、この式の論理をよく説明するだけです:小さなデータセットで、この式は成立しません)。複製乱数はゼロに近い)。
その結果、1回目については、COUNTIFは1を返し、そこから1を引いて元の順位を保ちます。 2回目については、COUNTIFは2を返し、1を引くことで順位を1つ上げ、順位の重複を防いでいます。
例えば、B2の場合、RANK.EQは1を返し、これは最初の出現なので、COUNTIFも1を返す。 RANK.EQ + COUNTIFは2を返し、-1はランク1を元に戻す。
B5の場合、RANK.EQは1を、COUNTIFは2を返す。 これを足すと3になるので、そこから1を引くと、B5の数値のランクを表す2が最終的に返ってくる。
ランクが上がります。 行番号 の引数を取り、対応する行から値を選びます。 列番号 引数が省略されているため、デフォルトは1)。 このように、ランキングの重複を避けることが重要です。 もしCOUNTIF関数がなければ、RANK.EQはB2、B5ともに1を出し、INDEXは1行目の値(Andrew)を2度返すことになります。
Excelのランダムサンプルが変更されないようにする方法
Excelのランダム関数(RAND、RANDBETWEEN、RANDARRAYなど)は揮発性なので、ワークシートが変わるたびに再計算されます。 その結果、ランダムサンプルが常に変化してしまいます。 これを防ぐには、特殊キーと値の貼り付け機能を使って数式を固定値に置換します。 そのために、次の手順を実行してください。
- 数式(RAND、RANDBETWEEN、RANDARRAY関数を含む数式)を含むすべてのセルを選択し、Ctrl + Cキーでコピーします。
- 選択した範囲を右クリックし ペースト・スペシャル > 価値観 または、Shift + F10 を押しながら V を押すと、上記の機能のショートカットになります。
詳細な手順については、「Excelで数式を値に変換する方法」をご覧ください。
Excelのランダム選択:行、列、セル
Excel 365からExcel 2010までのすべてのバージョンで動作します。
弊社のUltimate SuiteをExcelにインストールすれば、計算式の代わりにマウスクリックでランダムサンプリングができます。 その方法は以下のとおりです。
- について Ablebits Tools タブをクリックします。 ランダム化 > ランダム選択 .
- サンプルを採取する範囲を選択します。
- アドインのペインで、次の操作を行います。
- ランダムに行、列、セルのいずれを選択するかを選択します。
- サンプルサイズを定義する:それはパーセンテージまたは数であることができます。
- をクリックします。 選択 ボタンをクリックします。
下の画像のように、データセットから直接ランダムなサンプルが選択されました。 これをどこかにコピーしたい場合は、通常のコピーショートカット(Ctrl + C)を押してください。
以上、エクセルで重複のないランダムなサンプルを選択する方法でした。 読んでくださってありがとうございました!また来週のブログでお会いしましょう。
ダウンロード可能なもの
重複のない無作為標本 - 計算式の例 (.xlsx ファイル)
Ultimate Suite 14日間フル機能版(.exeファイル)