查看: 21  |  回复: 0
  VBA代码 随机抽取数组 RndFromArr
楼主
发表于 2025年3月18日 15:04
Function RndFromArr(RngArr, N&)
    '功能 : 从单列二维数组中不重复随机抽取N个数,返回抽取的的二维数组(单列)
    '变量 : RngArr 单元格区域/二维单列数组
    'N : 要抽取的个数
    Dim M&, arr, rng As Range, r&, i&, t
    Application.Volatile
    arr = RngArr
    ReDim brr(1 To N, 1 To 1)    '定义结果数组
    M = UBound(arr)    '
    If N > M Then RndFromArr = "Err": Exit Function
    Randomize    '随机种子初始化 以保证每次得到不同的随机序列
    For i = 1 To N    '遍历提取n个数据
        r = Int(Rnd * (M - i + 1)) + i    '从剩余数据中得到随机位置r (注意里面剩余数计算用m 不是n)
        t = arr(r, 1): arr(r, 1) = arr(i, 1): brr(i, 1) = t
        '用临时变量t进行随机位置和当前位置的交换 保证得到随机不重复乱序结果
    Next
    RndFromArr = brr
End Function


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