做了两个随机数获得的方法,第一个效率很明显低下,特别是碰到最大数,和要求返回数相近的时候, 方法一: Function GetRndArray_1(intMax As Integer,intNum As Integer) As Variant %REM 功能:获得随机数数组(和考卷库中Application库中此函数一致) 创建:ycy 2011-04-14 参数:intMax----最大数字 intNum----获取的个数 %END REM On Error GoTo ErrorHandle Dim varArray() As Variant Dim varResult() As Variant Dim varTmp As Variant Dim intLoopNum1 As Integer Dim strRndNum As String Dim i As Integer If intMax = 0 Or intNum = 0 Then Exit Function End If '如果最大数字,比要求的数字都大,这个需要特殊处理 If intMax < intNum Then intNum = intMax End If '定义数组宽度 ReDim varArray(intMax-1) ReDim varResult(intNum-1) '获取随机数 HandleGetRND: For i=0 To (intMax-1) HandleGetNext: strRndNum = CStr(CInt(intMax*Rnd())) '不要结果为0的数字 If strRndNum = "0" Then GoTo HandleGetNext Else varArray(i) = strRndNum End If Next '去掉重复元素 varTmp = ArrayUnique(varArray) '查找是否满足要求的随机数个数,如果不满足,重新获取 If (UBound(varTmp)+1)<intNum Then '10000次后仍然没有满足,则退出,此变量用来防止死循环 intLoopNum1 = intLoopNum1 + 1 If intLoopNum1 > 10000 Then Exit Function End If GoTo HandleGetRND End If For i = 0 To intNum - 1 varResult(i) = CStr(varTmp(i)) Next GetRndArray_1 = varResult Exit Function errorHandle: MsgBox "发生错误在Script库:Application------GetRndArray-----错误行:"+CStr(Erl)+" ,错误为:"+CStr(Error) End Function 方法二: Function GetRndArray_2(intMax As Integer,intNum As Integer) As Variant %REM 功能:获得随机数数组(和考卷库中Application库中此函数一致) 创建:ycy 2011-04-14 参数:intMax----最大数字 intNum----获取的个数 %END REM On Error GoTo ErrorHandle Dim varArray() As Variant Dim varResult() As Variant Dim varTmp As Variant Dim intRND As Integer If intMax = 0 Or intNum = 0 Then Exit Function End If '如果最大数字,比要求的数字都大,这个需要特殊处理 If intMax < intNum Then intNum = intMax End If ReDim varArray(intMax-1) ReDim varResult(intNum-1) '定义初始化数组 For i = 1 To intMax varArray(i-1) = i Next For i = 0 To intNum-1 intRND = CInt((intMax-1-i)*Rnd()) '得到一个随机位置 varResult(i) = varArray(intRND) '得到那个位置的数值 varArray(intRND) = varArray(UBound(varArray) - i) '将最后一个未用的数字放到这里 Next GetRndArray_2 = varResult Exit Function errorHandle: MsgBox "发生错误在Script库:Application------GetRndArray-----错误行:"+CStr(Erl)+" ,错误为:"+CStr(Error) End Function