Sub 随机抽取()
Dim ass(), n As Integer, aRes() As String, k As Integer, i%, tmp$
arr = Range("A2:A" & Range("A1048576").End(xlUp).Row).Value
n = Range("D2").Value
ReDim aRes$(1 To n, 1 To 1)
k = UBound(arr)
Randomize
While n > 0
i = Int(k * Rnd + 1)
1) = arr(i, 1)
tmp = arr(k, 1): arr(k, 1) = arr(i, 1): arr(i, 1) = tmp '位置调换
n = n - 1: k = k - 1
Wend
B100").ClearContents :
UBound(aRes, 2)) = aRes
End Sub
第3行:将数据区域装入数组
第4行:提取抽取数量
第5行:定义结果数据的数组大小
第6行:取数据源的数量
第7行:重置随机发生器
第8行:提取数量n>0则进入循环
第9行:在数据源的1-k之间随机取一个随机数据
第10行:将该随机数据所在数据源的行装入结果数组
第11行:将刚刚被抽取的的数据与第k个位置进行的数据进行交换位置,以避免重复
第12行:将随机范围k,与提取结果的位置n都减1,用于修改随机范围与结果数据装入的位置
第14行:清空结果区域所在单元格
第15行:将结果数组导入单元格
下面来看看效果:
好了,本期教程就到这里啦,走过路过的点个关注分享一下吧,谢谢啦,如果你是一个VBA小白,想要了解该如何开始学习VBA,建议看看以下文章
Excel VBA学习路线知识框架梳理(小白VBA入门必看-建议收藏)