プロが教えるわが家の防犯対策術!

乱数が0~9まであります。
次の出現率に従って乱数を生成したい場合どのように行えば良いでしょうか?

0の出現率は70%です。
1の出現率は20%です。
2の出現率は10%です。
3~9の出現率は0%です。

よろしくお願いします。

A 回答 (7件)

0~99 の範囲で乱数を出します



乱数の結果が
0~69 なら 0 を返します
70~89 なら 1 を返します
90~99 なら 2 を返します

という考え方をすれば良いかと
    • good
    • 6
この回答へのお礼

すごく単純にわかりやすくありがとうございました。
おかげで解決できそうです。

お礼日時:2013/12/14 00:34

必ず、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個になるはずです。
    • good
    • 3
この回答へのお礼

ありがとうございました。
解決できそうです。

お礼日時:2013/12/14 00:34

 回答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回等の様に、現れる割合が、期待される割合と比べてある程度ぶれてしまう事が普通だという意味です。
 この事は、他の回答者様方の御回答にある方法においても同様です。
    • good
    • 0
この回答へのお礼

ありがとうございました。
解決できそうです。

お礼日時:2013/12/14 00:33

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セルが所望の出現率で変化します。
    • good
    • 0
この回答へのお礼

ありがとうございました。
解決できそうです。

お礼日時:2013/12/14 00:33

一例です。

シートに
 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%!の結果とか嬉しいんですけど

補足日時:2013/12/13 16:37
    • good
    • 0

 あくまで確率ですので、サイコロを実際に振った場合において、各目の出る割合が1/6からずれるのと同じように、厳密に70%、20%、10%という割合とはなりませんが、次の様な関数にされると良いと思います。



=MATCH(RAND(),{0,0.7,0.9})-1
    • good
    • 0

乱数はRAND関数とRANDBETWEEN関数を使用するのはご存知ですよね。



求める範囲を0~9の関数を定義したら、
その戻り値の0~6を0にし
7,8を1
9を2に変換する処理を入れればよろしいかと

この回答への補足

すいません。ちょっと私の頭が足りてないせいなのか
よく理解できなかったです、、><;

補足日時:2013/12/13 14:46
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!