おもしろそうだったので考えてみました。
とりあえず、この素人マクロでやっていることは、
・1~1000までの数値をランダムに発生
・10の位が「2」だったら、シートに書き出し
・何回目で発生したか書き出し
・前回から何回かかったか書き出し
・以上を10000回繰り返し
・以上から、出現回数・最大小平均周期を集計
・以上を20回繰り返し
と言う作業です。
Sub Test10000()
Dim i As Long, j As Long, k As Long, l As Integer
Dim myRand As Integer
Dim EndRow As Integer
Cells.Delete
For l = 1 To 20
Range("A:C").ClearContents
i = 0: j= 0: k = 2
Cells(1, 1) = "回数"
Cells(1, 2) = "数値"
Cells(1, 3) = "周期"
For i = 1 To 10000
myRand = Int(Rnd() * 1000)
If Int(myRand / 10) Mod 10 = 2 Then
Cells(k, 1) = i
Cells(k, 2) = myRand
Cells(k, 3) = i - j
j = i
k = k + 1
End If
Next i
EndRow = Range("C2").End(xlDown).Row
Cells(1, 5) = "試行回数"
Cells(1, 6) = "出現回数"
Cells(1, 7) = "最大周期"
Cells(1, 8) = "最小周期"
Cells(1, 9) = "平均周期"
Cells(l + 1, 5) = l
Cells(l + 1, 6) = Application.WorksheetFunction.Count(Range("C2:C" & EndRow))
Cells(l + 1, 7) = Application.WorksheetFunction.Max(Range("C2:C" & EndRow))
Cells(l + 1, 8) = Application.WorksheetFunction.Min(Range("C2:C" & EndRow))
Cells(l + 1, 9) = Application.WorksheetFunction.Average(Range("C2:C" & EndRow))
Next l
Columns("I").NumberFormatLocal = "#,##0.00"
End Sub
エクセルを新規に立ち上げ、Alt+F11でVBEを起動させ、
上記コード(Sub~End Sub)を貼り付けて、F5で実行してみてくださいませ。
ちなみに
・For l = 1 To 20
20を変えると、試行回数が変わります。
・For i = 1 To 10000
10000を変えると、1回の試行の最大数値が変わります。
最大65535までにしておいた方が良いと思われます。
・If Int(myRand / 10) Mod 10 = 2 Then
2を変えると、確認したい数字を変更できます。
(10の位が● の部分です。)
あとはお好きに料理してくださいませ。
お礼
ご回答ありがとうございます。 これでやりたいことが出来ると思います。 あと、もうひとつ質問させてください。 0 1 2 3 4 5 6 7 8 9 0 9 0 7 6 5 0 3 2 1 上の数字が一つの桁に対してくる数字です。 下の数字は過去20回について、上の数字に対して直近で来たのが何回前かを表しているとします。上の例で言うと0、2、6の数字が過去20回では1回も来ていないことになります。 この3つの数に注目して分析したいのです。 3つの数字が過去20回の間に同時に0であるのは過去1万回の間に何回あるのか。また、そのときのそれぞれの直近で来た数字はそれぞれ何回前なのか。 そういった分析でも各セル毎にデータを入力することが出来れば計算できますか・・?