dポイントプレゼントキャンペーン実施中!

いつもお世話になっております
下記のコードは セルに数字の乱数をひょうじされるのですが、
一秒おきに変化させて10秒になったらおわりたいのですが
わかる方おしえてくれませんでしょうか

Sub randi()
Dim i As Long, j As Long
For i = 1 To 5
For j = 1 To 10
Randomize
Cells(i, j).Value = Round(Rnd, 0) 'Rnd関数実行 引数なし
Next j
Next i
End Sub

質問者からの補足コメント

  • うーん・・・

    いつもお世話になっております
    おしえてくれませんでしょうか
    もう少し 秒をみじかくするにはどうしたよろしいでしょうか

    No.3の回答に寄せられた補足コメントです。 補足日時:2022/10/13 08:45

A 回答 (4件)

以下のようにしてください。


call10を実行してください。
call10は1秒間隔でrandiを呼び出します。
------------------------------------------------------------------
Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long)
Sub call10()
Dim i As Long
For i = 1 To 10
Call randi
Sleep (1000)
Next
End Sub
Sub randi()
Dim i As Long, j As Long
For i = 1 To 5
For j = 1 To 10
Randomize
Cells(i, j).Value = Round(Rnd, 0) 'Rnd関数実行 引数なし
Next j
Next i
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2022/10/12 14:10

直接関係無いけど


Randomize と Rnd の関係について。

基本的な使い方は、Rndを使う前に、一度だけRandomizeを実行し、以降はRndだけ使う、というものです。

その例のようなループの中にRandomizeを入れるのは(明確な意図が無い限りは)やってはいけません。


Rndが返すのは「疑似乱数」と呼ばれるもので、
初期状態 から計算して 「乱数1」 と 「状態1」を求める
状態1 から計算して 「乱数2」 と 「状態2」を求める
状態2 から計算して 「乱数3」 と 「状態3」を求める
....
という計算を繰り返すことで、乱数1,2,3... を求めます。
計算を工夫することで、計算された値が「バラバラの乱数」っぽくなるようにしています。

状態n が同じだと、 そこから求められる 乱数 と 次の状態 は同じものになります。

Randomize は この「初期状態」を設定するためのものです。
引数無しで実行すると、現在時刻を元に初期状態を作ります。
このため、短時間で連続して Randomize→Rnd とやると、同じ値が続くことがあります。

また、最初の乱数だけ注目した場合、初期状態が近いと、通常よりも乱数の偏りが出ることもあります。
このため、短時間で連続して Randomize→Rnd とやると、思ったよりもバラバラにならない、ということもあります。
    • good
    • 0
この回答へのお礼

なかなか奥が深いものですね
参考にいたします。

お礼日時:2022/10/13 08:45

こんにちは



その間は、VBAが制御を専有していてもよいのなら・・

Sub randi()
Dim cnt As Long, c
For cnt = 1 To 10
For Each c In Range("A1:J5")
c.Value = Round(Rnd, 0)
Next c
Application.Wait Now() + TimeValue("00:00:01")
Next cnt
End Sub

とかではいかがでしょうか?
この回答への補足あり
    • good
    • 1
この回答へのお礼

ありがとうございました。

お礼日時:2022/10/23 18:45

Sub randi()


Dim i As Long, j As Long, k As Long

k=0
For i = 1 To 5
For j = 1 To 10

Application.Wait Now() + TimeValue("00:00:01")

Randomize
Cells(i, j).Value = Round(Rnd, 0) 'Rnd関数実行 引数なし

k=k+1
if k=10 then
exit sub
endif

Next j
Next i
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2022/10/12 14:11

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