ExcelVBA之随机抽取数据
有时候我们在做统计的时候,可能会遇到提取样本的需求,提取样本最重要的当然是随机性,今天我就来讲⼀下该如何⽤VBA实现随机提取⼀些数据。
例⼦:从Sheet1随机抽取5名⼈员,名单填⼊Sheet2
例⼦
想到随机,那么我们⼀般就要⽤到Rnd函数,⾸先我们看⼀下官⽹上Rnd函数的介绍
官⽹Rnd函数介绍
⼀般来说,我们不⽤参数,那么Rnd返回值就是 [0,1)
那么我们要返回⼀个A到B之间的整数的话,就可以这样写:
Int(Rnd * (B - A +1) + A)
随机函数就介绍到这⾥,接下来,就要开始抽取了,由于不能抽到相同的数据,那么就要排除掉已经抽到的,我想到了⽤集合Collection,当然,字典Dictionary也可以。
⾸先,将Sheet1的数据加⼊集合
Dim con As New CollectionWith Sheet1    For i = 1 To .[A65536].End(xlUp).Row        con.Add .Cells(i, 1).Value    NextEnd With
然后,可以定义⼀个数组,⽤来存放样本
5
接下来,开始随机抽取
For i = 1 To NUM        Randomize        rndIndex = Int(Rnd() * con.Count + 1)        arr(i) = con(rndIndex)        con.Remove rndIndex    Next 最后,将数据写⼊Sheet2即可
Sheet2.[A:A].ClearContentsSheet2.[A1].Resize(NUM, 1) = Application.Transpose(arr)
效果如图:
代码如图:
代码全貌
我将样本数量定义为常量NUM,这样做可以⽅便后期更改样本数量,只要修改⼀处即可。
其实还有⼀个随机抽取数据的⽅法,我们下期再讲。
>resize函数vba