当サイトではアフィリエイトプログラムを利用して商品を紹介しています。

【Excel】乱数表

母集団から個体を抜き取ることを標本抽出とよびますが、その抜き取り方に作為が混じらないようにするために、無作為抽出 (Random sampling) とよばれる手法が使われます。

乱数表

古くからある無作為抽出の方法として、乱数表(table of random numbers)を用いたものがあります。乱数表とは、0 から 9 までの数字を同じ確率で取り出して並べた表のことです(統計学の本の巻末に付属しています)。例として以下の 10 人(架空人物です)から無作為に 5 人を重複なしで抽出してみます。

氏名 割当番号
刀祢 佐一郎 0
土江 幾 1
羽後 亨昌 2
当真 光能 3
西村 樹里 4
三間 悦郎 5
十一谷 健作 6
風間 朝都 7
百武 岳美 8
新野 みずき 9

それぞれ 0 から 1 までの数字が割当てられています。
乱数表 から適当な数字をもってきて、たとえば

9 0 5 0 9 6 1 8 4

という数字をメモします。ここから重複した番号を消して

9 5 0 6 1 8 4

と書き直します。先頭から 5 番目までの数字を読み取って、それぞれの番号に対応する人を抜き出して無作為抽出が完了します。

新野 みずき、三間 悦郎、刀祢 佐一郎、十一谷 健作、西村 樹里

100 人から 10 人を選ぶような場合は、それぞれに 00 から 99 までの 2 桁の番号を割り当てます。乱数表の数字も 2 桁ごとに区切って

40|28|58|53|95|59|46|53|06

とすれば、同じように無作為抽出できます。

【Excel】無作為抽出

もちろん現代ではコンピュータを用いて無作為抽出を行ないます。ただし、その原理は乱数表を用いるものとほとんど同じです。ここでは Excel による比較的簡単な無作為抽出法を紹介します。先ほど載せた名簿の氏名の列だけコピーして、新しいワークシートのセル B2 に貼りつけてください。

重複を許して抽出

重複を許して名簿から 3 人を抽出してみます。
 
INDEX関数による重複あり抽出
 
セル D2 には

=INDEX($B$3:$B$12,RANDBETWEEN(1,10))

と入力して D5 までオートフィルします。INDEX関数は範囲と範囲内の相対的な行と列の位置を指定して該当するセルのデータを取り出します。

=INDEX(範囲,行位置[,列位置])

3つめの引数(列位置)は省略可能なので、たとえば

=INDEX($B$3:$B$12,1)

と記述するとセル B2 ~ B12 の範囲の 1 行目にある「刀祢 佐一郎」を抜き出します。また RANDBETWEEN関数は指定した2つの引数の間にある整数乱数を返すので、

= RANDBETWEEN(1,10)

と入力すれば 1 から 10 までの無作為な整数を返すことになります。したがって

=INDEX($B$3:$B$12,RANDBETWEEN(1,10))

と入力することで、指定範囲内のランダムな行を抜き出すことになります。

重複なしで抽出

今度は重複しないように名簿から 3 人を抽出します。
 

 
セル D3 に

=RAND()

と入力して D12 までオートフィルして 10 個の乱数を用意しておきます。セル F3 には

=INDEX($B$3:$B$12,RANK.EQ(D3,$D$3:$D$12))

と入力します。ここに RANK.EQ は指定範囲内の数値の順位を返す関数で (Excel2007 以前のバージョンでは RANK関数を使用してください)

=RANK.EQ(数値,参照[,順序])

で指定した数値が参照範囲内で何番目にあるかを返します。[順序] は省略可能で、その場合は大きい順(降順)となります。すなわち

=RANK.EQ(D3,$D$3:$D$12)

はセル D3 の数値がセル D3 ~ D12 の中で何番目にあるかという数値を返します。オートフィルによって D3 の部分は D4, D5, … となるので、それらの値が重なることはなく、重複なしで抽出することになります。VBA でプログラムを作ると、より簡単に無作為抽出できるようになります。そのあたりのことは メインサイト を参照してください。

エクセルや数学に関するコメントをお寄せください

  1. 匿名 より:

    重複しないように抽出、の項目ですが、この方法だと名簿の上3人しか抽出されないのでは?

    • Blog Cat より:

      おっしゃる通りです。おかしな記事を書いてしまいました。
      至急記事を書き直しますので、少しお待ちください。