如果只是取一个数的话,楼上几位朋友的方法都可以,如果是想取一组数的话,给你一个函数和例子:
Private Sub Command1_Click()
Dim lngArr() As Long
Dim i As Integer
Dim intCount As Integer
lngArr = GetNoRepeatRnd(50, 100)
intCount = UBound(lngArr)
For i = 1 To intCount
Debug.Print lngArr(i)
Next
End Sub
'************************************************
'** 函数名称: GetNoRepeatRnd
'** 函数功能: 产生无重复的随机数
'** 参数说明:
'** lngMinNum 要生成的随机数的最小值
'** lngMaxNum 要生成的随机数的最大值
'** 函数返回:
'** 返回一下标始终为1,上标为lngMaxNum - lngMinNum + 1的随机数列
'** 参考实例:
'** 生成从 1 到 50 之间的随机数
'** Dim lngRnd() As Long
'** lngRnd = GetNoRepeatRnd(1, 50)
'************************************************
Public Function GetNoRepeatRnd(ByVal lngMinNum As Long, ByVal lngMaxNum As Long) As Variant
Dim lngCyl As Long ' 记数器
Dim lngRnd As Long ' 当前产生的随机数
Dim lngTemp As Long ' 临时用来交换数据
Dim lngNumber As Long ' 数组的数量
Dim lngReturn() As Long ' 要返回的数组
'// 初始化随机序列
Randomize
lngNumber = lngMaxNum - lngMinNum + 1
'// 重定义数组
ReDim lngReturn(lngNumber)
'// 给数组赋值,从 lngMinNum 到 lngMaxNum
For lngCyl = lngMinNum To lngMaxNum
lngReturn(lngCyl - lngMinNum + 1) = lngCyl
Next
For lngCyl = 1 To lngNumber
'// 取得一个随机数
lngRnd = Int(Rnd * (lngNumber) + 1)
'********** 数据交换过程 **********
'// 取得当前序号(lngCyl)数组的值
lngTemp = lngReturn(lngCyl)
'// 将当前序号和随机号的内容交换
lngReturn(lngCyl) = lngReturn(lngRnd)
lngReturn(lngRnd) = lngTemp
'**********************************
Next
GetNoRepeatRnd = lngReturn
End Function
温馨提示:答案为网友推荐,仅供参考