EXCEL VBA 亂數原理
<pre class="brush: vb;">
Sub Rand()
Range("F2:G65535").Clear '清除儲存格
a = 7 '常數
b = 3 '常數
c = Sheet1.Range("B5") '常數設定亂數之範圍
Stime = Now() '開始時間
For i = 1 To c '產生亂數的資料筆數
'-----此段判斷值是用來縮減最後一個亂數所計算出來的時間
If i = c Then
SumValue = (1 + c) * c / 2
For k = 2 To c + 1 '開始迴圈計算以出現所有值的總和
NowSumValue = NowSumValue + Cells(k, 6)
Next k
NowCount = Sheet1.Range("F65536").End(xlUp).Row + 1
Cells(NowCount, 6) = SumValue - NowSumValue '用總和值減掉目前以產生出來的值總和
Cells(NowCount, 7) = Now() '寫入時間
Etime = Now() '記錄最後一筆資料產生的時間
Exit For
End If
'-----此段判斷值是用來縮減最後一個亂數所計算出來的時間
NowCount = Sheet1.Range("F65536").End(xlUp).Row
chk = 1 '判斷確認有無重覆資料的變數
NowSecond = Second(Now()) + i
R1 = (NowSecond * a + b) Mod c
R2 = (R1 * a + b) Mod c
R3 = (R2 * a + b) Mod c
R4 = (R3 * a + b) Mod c
'此段迴圈是用來判斷現在產生出來的亂數是否已經存在如果有存在的話chk變數就為0
For j = 1 To NowCount
ChkValue = Cells(j, 6)
If ChkValue = R3 + 1 Then
chk = 0
Exit For
End If
Next j
'上部分的迴圈如果變數不是為0的話就可以將新產生出來的亂數置入
If chk = 1 Then
NowCount = Sheet1.Range("F65536").End(xlUp).Row + 1
Cells(NowCount, 6) = R3 + 1
Cells(NowCount, 7) = Now()
Else '如果為0的話就重新產生此筆亂數
i = i - 1
End If
Next i
Range("D2") = Etime - Stime
End Sub
</pre>
Sub Rand()
Range("F2:G65535").Clear '清除儲存格
a = 7 '常數
b = 3 '常數
c = Sheet1.Range("B5") '常數設定亂數之範圍
Stime = Now() '開始時間
For i = 1 To c '產生亂數的資料筆數
'-----此段判斷值是用來縮減最後一個亂數所計算出來的時間
If i = c Then
SumValue = (1 + c) * c / 2
For k = 2 To c + 1 '開始迴圈計算以出現所有值的總和
NowSumValue = NowSumValue + Cells(k, 6)
Next k
NowCount = Sheet1.Range("F65536").End(xlUp).Row + 1
Cells(NowCount, 6) = SumValue - NowSumValue '用總和值減掉目前以產生出來的值總和
Cells(NowCount, 7) = Now() '寫入時間
Etime = Now() '記錄最後一筆資料產生的時間
Exit For
End If
'-----此段判斷值是用來縮減最後一個亂數所計算出來的時間
NowCount = Sheet1.Range("F65536").End(xlUp).Row
chk = 1 '判斷確認有無重覆資料的變數
NowSecond = Second(Now()) + i
R1 = (NowSecond * a + b) Mod c
R2 = (R1 * a + b) Mod c
R3 = (R2 * a + b) Mod c
R4 = (R3 * a + b) Mod c
'此段迴圈是用來判斷現在產生出來的亂數是否已經存在如果有存在的話chk變數就為0
For j = 1 To NowCount
ChkValue = Cells(j, 6)
If ChkValue = R3 + 1 Then
chk = 0
Exit For
End If
Next j
'上部分的迴圈如果變數不是為0的話就可以將新產生出來的亂數置入
If chk = 1 Then
NowCount = Sheet1.Range("F65536").End(xlUp).Row + 1
Cells(NowCount, 6) = R3 + 1
Cells(NowCount, 7) = Now()
Else '如果為0的話就重新產生此筆亂數
i = i - 1
End If
Next i
Range("D2") = Etime - Stime
End Sub
</pre>
留言
張貼留言