如果对于随机数了解没有什么问题,请跳过思路,直接看函数,如果对有函数有疑问或是改进意思,欢迎来信[email protected]
' 思路
Randomize ' 初始化随机数生成器
Print Int ( Rnd () * 2 ) ' 生成随机数范围是0-1
' 如果要生成1-10之间的随机数:
' 可以看作随机数的的起始数是:1,范围是1+(0~9)
' Int(Rnd() * 10) 生成0-9之间的数,再加上起始数1,所以
Print Int ( Rnd () * 10 ) + 1
' 如果要生成10-30之间的随机数:
' 可以看作随机数的起始数是:10,范围是10+(0~20)
' int(Rnd() * 21)生成0-20之间的随机数,再加上起始数10,所以
Print Int ( Rnd () * 20 + 1 ) + 10
' 如果要生成N-M之间的随机数
' 可以看作随机数的起始数是:N,范围是10+(0~M-N)
' int(Rnd() * (M-N+1))生成0-(M-N)之间的随机数,再加上起始数N,所以
Print Int ( Rnd () * (M - N + 1 )) + N
函数正文:
' --------------------------------------------------------------------------------------
' 任意随机数(N-M)的函数(单取、多取存入数组、排序等功能)
' ----------------------------------------------2008-4-11
' -----------------------------------by 鞠勇鸿
' 对于本函数有改进意见,如果您方便请发邮件致:[email protected]
' --------------------------------------------------------------------------------------
Function getRnd(N, M As Integer ) As Integer ' 取N-M之间的随机数,M>=N
getRnd = Int ( Rnd () * (M - N + 1 )) + N
End Function
Function getArrRndNR(Counter As Integer , N, M As Integer ) As Integer () ' 取Counter个N-M之间的随机数(不重复)
If (Counter > (M - N + 1 )) Then
MsgBox " 随机数设置不正确 "
Exit Function
End If
ReDim arr( 1 To Counter) As Integer
i = 0
Do While i < Counter
arr(i + 1 ) = getRnd(N, M)
found = False
For X = 1 To i
If arr(X) = arr(i + 1 ) Then
found = True
Exit For
End If
Next
If Not found Then
i = i + 1
End If
Loop
getArrRndNR = arr
End Function
Function getArrRnd(Counter As Integer , N, M As Integer ) As Integer () ' 取Counter个N-M之间的随机数(可重复)
If (Counter > (M - N + 1 )) Then
MsgBox " 随机数设置不正确 "
Exit Function
End If
ReDim arr( 1 To Counter) As Integer
For i = 1 To Counter
arr(i) = getRnd(N, M)
Next
getArrRnd = arr
End Function
Sub OrderNumberD(arr) ' 从大到小排序
For i = LBound (arr) To UBound (arr)
For j = LBound (arr) To UBound (arr)
If arr(i) > arr(j) Then
X = arr(i)
arr(i) = arr(j)
arr(j) = X
End If
Next
Next
End Sub
Sub OrderNumberA(arr) ' 从小到大排序
For i = LBound (arr) To UBound (arr)
For j = LBound (arr) To UBound (arr)
If arr(i) < arr(j) Then
X = arr(i)
arr(i) = arr(j)
arr(j) = X
End If
Next
Next
End Sub
' --------------------------------------------------------------------------------------
' ---------------------------------------函数结束---------------------------------------
' --------------------------------------------------------------------------------------
测试:
' 测试
Private Sub Command1_Click()
Randomize ' 一定要初始化随机数,否则每次打开程序取出的数都一样的。
MsgBox getRnd( 1 , 12 ), vbOKOnly, " 1-12之间任取一数 "
arr = getArrRndNR( 10 , 11 , 33 ) ' 取10个11-33之间不重复的随机数,存入数组arr,取重复的可以用getArrRnd函数
OrderNumberA arr ' 升序排列数组arr ,降序排列为OrderNumberD
For i = 1 To UBound (arr) ' 显示
Print arr(i)
Next
End Sub