- ベストアンサー
[EXCEL]一定の確率で乱数を発生
乱数が0~9まであります。 次の出現率に従って乱数を生成したい場合どのように行えば良いでしょうか? 0の出現率は70%です。 1の出現率は20%です。 2の出現率は10%です。 3~9の出現率は0%です。 よろしくお願いします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
0~99 の範囲で乱数を出します 乱数の結果が 0~69 なら 0 を返します 70~89 なら 1 を返します 90~99 なら 2 を返します という考え方をすれば良いかと
その他の回答 (6)
- hallo-2007
- ベストアンサー率41% (888/2115)
必ず、10回で0が7回ということでしょうか? A B =Rand() 0 =Rand() 0 =Rand() 0 =Rand() 0 ・・・ =Rand() 0 =Rand() 1 =Rand() 1 =Rand() 2 と対応表を準備します =VLOOKUP(SMALL(A:A,ROW(A1)),A$1:B$10,2,FALSE) と入れて、下へ10行分コピー 再計算(F9)を押すと必ず 0が7個 1が2個、2が1個になるはずです。
お礼
ありがとうございました。 解決できそうです。
- kagakusuki
- ベストアンサー率51% (2610/5101)
回答No.2です。 もしかしますと、勘違いされてしまったのかもしれませんが、 >厳密に70%、20%、10%という割合とはなりません という部分の意味は、「出現率が70%、20%、10%にならない」という意味では御座いません。 例えば、サイコロを6回振った時に、偶然にも1が連続して6回現れる事もありえなくはないのと全く同じ理由により、出現率が厳密に70%、20%、10%になっていた場合においても、乱数を実際に100回発生させた際に、0が正確に70回、1が正確に20回、2が正確に10回だけ現れる事は稀で、0が71回、1が18回、2が11回等の様に、現れる割合が、期待される割合と比べてある程度ぶれてしまう事が普通だという意味です。 この事は、他の回答者様方の御回答にある方法においても同様です。
お礼
ありがとうございました。 解決できそうです。
- ts3m-ickw
- ベストアンサー率43% (1248/2897)
10面体サイコロを作り、0の目を7つ、1の目を2つ、2の目を1つ書けばいいのです。 A1に「=OFFSET(A1,INT(RAND()*10)+1,0)」を入力し、 A2~A11に順に0、0、0、0、0、0、0、1、1、2を並べます。 ファイルを開き直すたび、あるいはどこかのセルを更新するたびにA1セルが所望の出現率で変化します。
お礼
ありがとうございました。 解決できそうです。
- hallo-2007
- ベストアンサー率41% (888/2115)
一例です。シートに A B 0 0 1 0 2 0 3 0 ・・・ 6 0 7 1 8 1 9 2 と対応表を準備します =VLOOKUP(INT(RAND()*10),A1:B10,2,FALSE) ランダムな整数を、対応表に基づいて表示を変えています。
補足
うーん、なかなか思い通りの動きとは残念ながら違っているようです、、、。 やっぱり難しいんでしょうか、、、。 極端な話をすれば、0~9までの乱数を使って10回まわして 1の出る確率が50%、2の出る確率が50%!の結果とか嬉しいんですけど
- kagakusuki
- ベストアンサー率51% (2610/5101)
あくまで確率ですので、サイコロを実際に振った場合において、各目の出る割合が1/6からずれるのと同じように、厳密に70%、20%、10%という割合とはなりませんが、次の様な関数にされると良いと思います。 =MATCH(RAND(),{0,0.7,0.9})-1
- usami33
- ベストアンサー率36% (808/2210)
乱数はRAND関数とRANDBETWEEN関数を使用するのはご存知ですよね。 求める範囲を0~9の関数を定義したら、 その戻り値の0~6を0にし 7,8を1 9を2に変換する処理を入れればよろしいかと
補足
すいません。ちょっと私の頭が足りてないせいなのか よく理解できなかったです、、><;
お礼
すごく単純にわかりやすくありがとうございました。 おかげで解決できそうです。