查看: 24  |  回复: 0
  VBA代码 不重复随机整数区间
楼主
发表于 2025年3月18日 15:02
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''***************arrRndBetween*************************************
'目的:    返回lngLow至lngUp之间的不重复随机整数数组
'参数:    lngLow:   产生随机整数的下限
'          Lngup:    产生随机整数的上限
'          如参数为小数,将四舍五入。
'返回:    arrRndBetween()随机不重复整数数组
'*****************************************************************

Function arrRndBetween(lngLow, lngUp)
    Dim arrResult() As Long
    Dim lngTemp As Long, i As Long, lngRand As Long
    ReDim arrResult(1 To lngUp - lngLow + 1)
    For i = 1 To lngUp - lngLow + 1
            arrResult(i) = i + lngLow - 1
    Next i
    For i = 1 To lngUp - lngLow + 1
        lngRand = Int(Rnd() * (lngUp - lngLow + 1) + 1) '产生在lngUp-lngLow之间随机整数
        lngTemp = arrResult(lngRand)                  '将arrResult(随机整数)与arrResult(i)互换
        arrResult(lngRand) = arrResult(i)
        arrResult(i) = lngTemp
    Next i
    arrRndBetween = arrResult
End Function

Function superTr(x)
'转行数组为列,以便写入列range,系统转置有bug
    Dim l, i, xx
    l = LBound(x)
    ReDim xx(1 To UBound(x) - l + 1, 1 To 1)
    For i = l To UBound(x)
        xx(i, 1) = x(l + i - 1)
    Next
    superTr = xx
End Function

Public Sub arrN(n, ByRef a()) '生成1-n的整形数组
    Dim i As Long
    For i = 1 To n
        a(i) = i
    Next
End Sub

Public Sub randtest()
    Dim a
    a = arrRndBetween([A1], [B1])
    Range("A2").Resize(UBound(a), 1) = superTr(a)
End Sub

Function RndToArr(ByVal min, ByVal max, n, d)
    'min=最小值,max=最大值,n=个数,d=小数位
    'RAND()*(b-a)+a 工作表函数帮助
    Dim i
    ReDim arr(1 To n)
    For i = 1 To n
        arr(i) = Application.Round(Rnd() * (max - min) + min, d) '四舍五入得到[min,max]区间的随机数
    Next
    RndToArr = arr
End Function


您需要登录后才可以回帖 登录 | 立即注册
【本版规则】请勿发表违反国家法律的内容,否则会被冻结账号和删贴。
用户名: 立即注册
密码:
2020-2025 MaNongKu.com