重複しない数を作る

1から10までの数から、数字を3つ取り出す時、どんな方法があるか?
(乱数を使うのであるから、RAND関数はもちろん使う。)


(1) 乱数に10をかけて、小数点以下を切り捨てる方法。

表示 表示  考え方
 1  =RAND() 0.755370032 =INT(A1*10)+1 8  乱数を10倍して小数点以下を切り捨て、1を足す
 2  =RAND() 0.268101243 =INT(A2*10)+1 3 (省略)
3  =RAND() 0.233636498 =INT(A3*10)+1 3 (省略)

※ RAND()関数 → 乱数を作る   INT関数 → 小数部分を切り捨てる

乱数を10倍する方法が一番簡単であるが、これだと時として上のように同じ数字がでてきてしまうことがある。
重複する確率を計算してみると、
10個の数字から3回取り出すことになるから、その組み合わせは 10×10×10=1000 通りある。
重複無しの取り出し方を考えてみると、最初は10通り、2回目は1回目の数字を外して選ぶから9通り、3回目は1回目と2回目の数字を外すから8通り。
これを掛け合わせると、10×9×8=720 通りになる。
重複無しの確率は、720/1000 つまり、72/100 であるから、重複する確率は(100−72)/100 で、28/100 となる。
28%の確率で、重複するわけである。
ちなみに、エクセルで100万回試行したところ、279876回の重複があった。



(2) RANK関数を使う方法。

表示 B 表示  考え方
 1  =RAND() 0.726087164 =RANK(A1,$A$1:$A$10)  乱数に順位を付ける
2  =RAND() 0.149075322 =RANK(A2,$A$1:$A$10) (省略)
3  =RAND() 0.280064633 =RANK(A3,$A$1:$A$10) (省略)
4  =RAND() 0.198086145 =RANK(A4,$A$1:$A$10) (省略)
5  =RAND() 0.615356539 =RANK(A5,$A$1:$A$10) (省略)
6  =RAND() 0.62789441 =RANK(A6,$A$1:$A$10) (省略)
7  =RAND() 0.762330427 =RANK(A7,$A$1:$A$10) (省略)
8  =RAND() 0.058450129 =RANK(A8,$A$1:$A$10) 10  (省略)
9  =RAND() 0.250046347 =RANK(A9,$A$1:$A$10) (省略)
10  =RAND() 0.916499109 =RANK(A10,$A$1:$A$10) (省略)

※ RAND()関数 → 乱数を作る   RANK関数 → 順位を付ける

この表から、上から3つ数字を取り出す方法である。
ちなみに、エクセルで100万回試行したところ、重複は0回であった。

さらに完璧にしたいのであれば、B11に =SUM(B1:B10) を入れ、
55(この場合なら)になっていることを確認すればよい。
そして、55になってなければ、F9を押して再計算させる。