在excel中,可以用工作表函数RAND生成一个小于1,大于等于0的随机实数。
这个函数是没有参数的,用法很简单,直接=RAND()即可。
根据算法,即使整个工作表的单元格都使用这个函数,生成的数之间也几乎不会有重复的概率。
在vba中可以使用Rnd函数生成一个小于1,大于等于0的随机实数。
它的语法如下:
Rnd[(number)]
1.如果number参数不提供或者是>0的话,则生成随机数序列中的下一个随机数。
例如如下的代码将在工作表中生成100个小于1,大于等于0的随机不重复实数:
Sub QQ1722187970()
Dim oWK As Worksheet
Set oWK = Sheet2
With oWK
.Cells.Clear
For i = 1 To 100
'Rnd函数的参数不提供
.Cells(i, 1) = VBA.Rnd
Next i
End With
End Sub
Sub QQ1722187970()
Dim oWK As Worksheet
Set oWK = Sheet2
With oWK
.Cells.Clear
For i = 1 To 100
'Rnd函数的参数>0
.Cells(i, 1) = VBA.Rnd(2)
Next i
End With
End Sub
2.如果number参数=0的话,则返回最近一个用Rnd函数返回的随机数。
Sub QQ1722187970()
Dim oWK As Worksheet
Set oWK = Sheet2
With oWK
.Cells.Clear
For i = 1 To 5
'Rnd函数的参数>0
.Cells(i, 1) = VBA.Rnd(1)
Next i
For i = 6 To 10
'Rnd函数的参数=0,返回最近一个用Rnd函数返回的随机数,也就是cells(5,1)中存储的随机数
.Cells(i, 1) = VBA.Rnd(0)
Next i
End With
End Sub
3.如果如果number参数<0的话,则返回一个不变的用number作为随机数发生seed产生的第一个随机数。
Sub QQ1722187970()
Dim oWK As Worksheet
Set oWK = Sheet2
With oWK
.Cells.Clear
For i = 1 To 5
'Rnd函数的参数>0
.Cells(i, 1) = VBA.Rnd(1)
Next i
For i = 6 To 10
'Rnd函数的参数=0,返回最近一个用Rnd函数返回的随机数,也就是cells(5,1)中存储的随机数
.Cells(i, 1) = VBA.Rnd(0)
Next i
For i = 11 To 15
'Rnd函数的参数<0,将返回一个不变的数,这个数是用参数-3作为随机数发生数seed后产生的第一个随机数
.Cells(i, 1) = VBA.Rnd(-3)
Next i
End With
End Sub
4.对于相同的随机数序列发生数seed,Rnd函数返回的随机数序列将是一样的。
5.如果要改变生成的随机数序列,可以在使用Rnd函数前先用Randomize语句初始化一个随机数序列发生数seed。
Sub QQ1722187970()
'生成一个随机数seed
Randomize
Dim oWK As Worksheet
Set oWK = Sheet2
With oWK
.Cells.Clear
For i = 1 To 5
'Rnd函数的参数>0
.Cells(i, 1) = VBA.Rnd(1)
Next i
For i = 6 To 10
'Rnd函数的参数=0,返回最近一个用Rnd函数返回的随机数,也就是cells(5,1)中存储的随机数
.Cells(i, 1) = VBA.Rnd(0)
Next i
For i = 11 To 15
'Rnd函数的参数<0,将返回一个不变的数,这个数是用参数-3作为随机数发生数seed后产生的第一个随机数
.Cells(i, 1) = VBA.Rnd(-3)
Next i
End With
End Sub


发表评论