- ベストアンサー
EXCEL 乱数発生の記録
A1~C1 に0~9の乱数を発生[=RANDBETWEEN(0,9)]させ Dの列に再計算[F9を押す]の回数、E~Gの列に出た乱数の値を入れたいのですが、関数で可能でしょうか。 D E F G 1 1 2 5 7・・・1回目は 2,5,7が出た。 2 2 8 1 0・・・2回目は 8,1,0が出た。 3 3 9 4 4・・・3回目は 9,4,4が出た。 4 4 0 3 2・・・4回目は 0,3,2が出た。 このように再計算を行うと下の行に追加していきたいのですが、可能でしょうか。 宜しくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
つぎの方法でできます。 反復計算を利用した方法です。 (1)ツール→オプション→計算方法 で、「自動」と「反復計算」にチェックを入れ、最大反復回数を1にする。 (2)E1に、=IF($H$1>=ROW(E1),IF(ISNUMBER(E1),E1,A$1),"") (3)E1をF1,G1にコピー (4)H1に、=IF(I1=0,0,H1+1) (5)I1に、0 (6)E2に、=IF($H$1>ROW(E2),IF(ISNUMBER(E2),E2,A$1),"") (7)E2を、E2~G100(など、必要なだけ)コピー (8)D1に、=IF(ROW(D1)<$H$1,ROW(D1),"") (9)D1を、D2~D100(など、必要なだけ)コピー (10)ここで、I1を1に変える。 (11)F9を必要な回数押すと乱数が記録される。 (12)I1を0に戻すとリセットされる。
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
>A1~C1 に0~9の乱数を発生[=RANDBETWEEN(0,9)]させ マクロは以下のとおりなのですが、この乱数には、癖があったような気がします。 思ったよりも出方が決まっているということです。これは、PCのランダム発生のメカニズムで、そのつど初期化しないと、決まった型になってしまうのだったと思います。 出来れば、乱数発生を(初期化=Randomizeしながら)、マクロで行うほうが良いかもしれません。 とりあえず、様子をみてください。 シートタブのところで、右クリック-コードの表示で、クリック 後は、以下を貼り付けてください。 Private Sub Worksheet_Calculate() Dim ary Dim rng As Range Application.EnableEvents = False ary = Range("A1:C1").Value Set rng = Range("D65536").End(xlUp) If Not IsEmpty(rng) Then Set rng = rng.Offset(1) rng.Value = Application.CountA(Range("D:D")) + 1 & "回目" Else Range("D1").Value = 1 & "回目" End If rng.Offset(, 1).Resize(, 3).Value = ary Set rng = Nothing Erase ary Application.EnableEvents = True End Sub
お礼
早々のご解答有難う御座います。 関数を十分理解した上で、マクロの勉強をしたいと 思っています。 ただ今、関数の勉強中です。 いただきましたコードもノートに記載しておき、 マクロの勉強の際に、役立てたいと思います。 有難う御座いました。
- macchan1
- ベストアンサー率38% (52/136)
マクロで例えば10回計算させるなら以下のようなコードでできます。 Sub Sample() For i = 1 To 10 Range("A1:C1").Copy Range("E50000").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlValues Calculate Next i End Sub
お礼
早々のご解答有難う御座います。 関数を十分理解した上で、マクロの勉強をしたいと 思っています。 いただきましたコードもノートに記載しておき、 マクロの勉強の際に、役立てたいと思います。 有難う御座いました。
- macchan1
- ベストアンサー率38% (52/136)
関数でやるなら、E1~G4などの範囲にすべ=RANDBETWEEN(0,9)を入力するのが良いと思うのですが、回数を分ける意味はあるのでしょうか? 回数を分ける場合はマクロ(A1:C1の値貼り付け)で対応するしかありません。
お礼
早々のご解答有難う御座います。 乱数で発生した3けたの数字を記録を残したかったので E1~G4などの範囲にすべ=RANDBETWEEN(0,9)を入力する では、記録を残せない為質問しました。 有難う御座いました。
お礼
早々のご解答有難う御座います。 出来ました。私のやりたかった通りです。 ただ、1回目と2回目に同じ数字が入りますが 全然問題ありません。 自分で解決してみたいと思います。 ただ今、関数の勉強中ですので、また質問すると思いますが、よろしくお願いします。 有難う御座いました。