vba代码大全027:如何用vba生成0-1之间的随机数?

在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

 

       

发表评论