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