人に聞けない痔の悩み、これでスッキリ >>

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

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

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (7件)

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



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

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

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

お礼日時: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
    • 0
この回答へのお礼

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

お礼日時: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に関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセル指定した範囲からランダムで一つ抽出

エクセルの関数についての質問なのですが、

B1~B5に値がならんでいたとして、B1~B5の中からランダムに一つ抽出したものをA3に表示する関数はありますか?

Aベストアンサー

A3に次の式を入力すればよいでしょう。

=INDEX(B1:B5,RANDBETWEEN(1,5))

Q乱数を発生させて確率を求める

さいころを2つ振って両方とも1の出る確率、同じ目が出る確率を求めるプログラムを作りたいのですが、初心者なのでまったくわかりません。誰か教えてください、お願いします。

Aベストアンサー

Public Sub test()
Dim 試行回数, 両方1, 同じ目
Dim dice1, dice2
Randomize ' 乱数発生ルーチンを初期化します。

同じ目 = 0
両方1 = 0

For 試行回数 = 1 To 10000 '1万回試してみる
dice1 = dice() '1個目のサイコロ
dice2 = dice() '2個目のサイコロ
If dice1 = dice2 Then '同じ目が出た
同じ目 = 同じ目 + 1 '同じ目がでたことをカウントして記録
If dice1 = 1 Then 両方1 = 両方1 + 1 '両方1がでたことをカウントして記録
End If
Next
MsgBox "同じ目が出た割合:" & 同じ目 / 10000, , "同じ目が出た割合"
MsgBox "両方1が出た割合:" & 両方1 / 10000, , "両方1が出た割合"

End Sub
Function dice() As Integer
dice = Int((6 * Rnd) + 1) ' 1 から 6 までの乱数を発生させる
End Function
'------------------------------------------------
って感じですかね。
やってみたところ
同じ目:1.167
両方1:0.0288
になりました。
理論的には、
同じ目:1.16666…(1/6)
両方1:0.02777…(1/36)
なので
実験結果としては、両方1が出るのが若干大きくなりました。
こういうことは、使用する乱数(の良さ)に依るところもあるので、まあ、なんとも言えないですけど。
試行回数は、適当に大きくしたりしてみて下さい。

Public Sub test()
Dim 試行回数, 両方1, 同じ目
Dim dice1, dice2
Randomize ' 乱数発生ルーチンを初期化します。

同じ目 = 0
両方1 = 0

For 試行回数 = 1 To 10000 '1万回試してみる
dice1 = dice() '1個目のサイコロ
dice2 = dice() '2個目のサイコロ
If dice1 = dice2 Then '同じ目が出た
同じ目 = 同じ目 + 1 '同じ目がでたことをカウントして記録
If dice1 = 1 Then 両方1 = 両方1 + 1 '両方1がでたことをカウントして記録
End If
Next
MsgBox "同じ...続きを読む

QExcelで事前にセルに入力した言葉をランダムに表示

例えばA1に「いぬ」 A2に「ねこ」 A3に「ぞう」 A4に「たぬき」 A5に「きつね」と入力します
次に
B1~B10に 「いぬ」「ねこ」「ぞう」「たぬき」「きつね」のいずれかを自動にランダムに表示する方法を教えてください
こんな便利な機能があれば良いと思うのですが・・・

Aベストアンサー

=INDIRECT("A"&INT(RAND()/0.2)+1)

INT(RAND()/0.2)+1 で1~5までの整数が得られます。
INT(RAND()/0.1)+1 で1~10までの整数が得られます。
INT(RAND()/0.02)+1 で1~50までの整数が得られます。
INT(RAND()/0.01)+1 で1~100までの整数が得られます。

それでA1からA5、A1からA10、A1~A50、A1~A100のセルの内容を取得しています。A2からなら+2にしてください。
F9キーを押すたびに再計算されて、表示も変わります。

Qエクセル関数を使って、ランダム抽出をしたいです

エクセル関数を使って、ランダム抽出をしたいのですが
どの関数を使用すればいいのかわからないのです。

現在、1つのシートにいろいろなデータが入っているのですが、
D列のデータを使い、そのデータをランダムに25件抽出したいのです。

よろしくお願い致します。

Aベストアンサー

Sheet1にデータが入っているとして、そのD列のデータをSheet2のA列に取り出して操作をすることにします。
関数で取り出すのでしたらSheet2のA1セルに次の式を入力し下方にオートフィルドラッグします。
=Sheet1!D1
B1セルには次の式を入力し下方にオートフィルドラッグします。
=IF(A1="","",RAND())
C1セルには次の式を入力し下方にオートフィルドラッグします。
=IF(A1="","",RANK(B1,B:B))
D1セルには次の式を入力し下方にオートフィルドラッグします。
=IF(OR(COUNTIF(C:C,ROW(A1))=0,ROW(A1)>25),"",INDIRECT("A"&MATCH(ROW(A1),C:C,0)))
これでSheet2のD列にはランダムに抽出されたデータが並ぶことになります。
なお、F9のキーを押すことで抽出操作を繰り返すことができます。

QEXCELで乱数表示に条件を加えたいのですが...

1から10までの数をA1~A10のセルに重複なしでランダムに表示する際に,
今まで,RAND関数,RANK関数,RANDBETWEEN関数,sortedlistクラスなどを使っていました.

そこに,A1には2はダメ!,A2には4はダメ! … というように,各セルで表示される数を制限
した下でランダム表示したいのですが,どのようにすればいいか思いつきません...

良い考えがあれば,是非教えて下さい.お願いします.

Aベストアンサー

作業列を使って対応します。
A1セルからA10セルに1から10までの数値をランダムに並べるとして、B列にはA1セルが2はだめとするならB1セルに2、A2セルが4はだめとするならB2セルに4と入力します。他の条件の場合のB列のセルにその数値を入力します。
C1セルには次の式を入力してC10セルまでドラッグコピーします。

=RAND()

D1セルには次の式を入力してD10セルまでドラッグコピーします。

=IF(RANK(C1,C$1:C$10)=B1,0,RANK(C1,C$1:C$10))

その後にA1セルには次の式を入力してA10セルまでドラッグコピーします。

=IF(SUM(D$1:D$10)=55,D1,"")

これでD列での合計が55の場合にはA1セルからA10セルには1から10までの数値がランダムに表示されます。
B列で制限された数値を考慮した数値がランダムに表示されます。
表示されない場合にはF9キーを押してください。

QVBAで偏りのある乱数を出したい場合

質問が的外れだったらすみません

ExcelのVBAで、たとえば1から5の数字をランダムで出す時
2の出る確率を他より高くする方法はありますでしょうか?

宜しくお願いします

Aベストアンサー

昔、Accessでやった場合はこんな感じ。参考になるかな?

Function omikuji()
'大凶5、凶10、小吉30、末吉25、吉20、大吉10 の比率
  Dim mikuji As Single
  
  Randomize
  omikuji = Int((100 * Rnd) + 1)
  
  Select Case omikuji
    Case Is > 95
      Forms!Fおみくじ!おみくじ = "大凶"
    Case Is > 85
      Forms!Fおみくじ!おみくじ = "凶"
    Case Is > 55
      Forms!Fおみくじ!おみくじ = "小吉"
    Case Is > 30
      Forms!Fおみくじ!おみくじ = "末吉"
    Case Is > 10
      Forms!Fおみくじ!おみくじ = "吉"
    Case Is > 0
      Forms!Fおみくじ!おみくじ = "大吉"
  End Select

End Function

昔、Accessでやった場合はこんな感じ。参考になるかな?

Function omikuji()
'大凶5、凶10、小吉30、末吉25、吉20、大吉10 の比率
  Dim mikuji As Single
  
  Randomize
  omikuji = Int((100 * Rnd) + 1)
  
  Select Case omikuji
    Case Is > 95
      Forms!Fおみくじ!おみくじ = "大凶"
    Case Is > 85
      Forms!Fおみくじ!おみくじ = "凶"
    Case Is > 55
      Forms!Fおみくじ!おみくじ = "小吉"
    Case Is > 30
    ...続きを読む

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

QEXCEL VBAで計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。

Q表(リスト)からランダムに抽出するには?

Excelで次のような表を作りました。(例として書きます)

1. みかん
2. バナナ
3. もも
4. なし
5. 栗   ・・・(以下同様) と続いていきます。

今回、その表から、ランダムにデータを抽出し、別のセルに書き出したいのですがどうやっていいのかわかりません。(理想図を下に書きます。)


2. バナナ
5. 栗
1. みかん  ・・・・・(以下同様)

このようにして、今ある表から、ランダムに並び替えた、 『新たな表』 を作りたいのです。

どのように関数(RAND関数?)を設定したらいいのかよくわかりません。 教えてください。お願いします。

ちなみにOffice2000です。

Aベストアンサー

こんにちは。maruru01です。

作業列を1列だけ使用した、絶対に重複しない数式での方法です。
元データがA1:B5で、C列を作業列に使用して、D:E列に表示するとします。
まず、C1に、

=INT(RAND()*5+1)

と入力します。次に、C2に、

=LARGE(INDEX(NOT(COUNTIF($C$1:C1,ROW($A$1:$A$5)))*ROW($A$1:$A$5),),INT(RAND()*(5-ROW(C1))+1))

と入力して、C5までコピーします。
そうしたら、D1に、

=INDEX(A:A,$C1)

と入力して、E1にコピー。
さらに、D1:E1を5行目までコピー。

やはり、[F9]を押すたびごとに並べ替えられます。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング