有時候我們在做統計的時候,可能會遇到提取樣本的需求,提取樣本最重要的當然是隨機性,今天我就來講一下該如何用VBA實現隨機提取一些數據。
例子:從Sheet1隨機抽取5名人員,名單填入Sheet2
想到隨機,那麼我們一般就要用到Rnd函數,首先我們看一下官網上Rnd函數的介紹
一般來說,我們不用參數,那麼Rnd返回值就是 [0,1)
那麼我們要返回一個A到B之間的整數的話,就可以這樣寫:
<code>Int(Rnd * (B - A +1) + A)/<code>
隨機函數就介紹到這裡,接下來,就要開始抽取了,由於不能抽到相同的數據,那麼就要排除掉已經抽到的,我想到了用集合Collection,當然,字典Dictionary也可以。
首先,將Sheet1的數據加入集合
<code>Dim con As New Collection
With Sheet1
For i = 1 To .[A65536].End(xlUp).Row
con.Add .Cells(i, 1).Value
Next
End With/<code>
然後,可以定義一個數組,用來存放樣本
<code>Dim arr(1 to 5)/<code>
接下來,開始隨機抽取
<code>For i = 1 To NUM
Randomize
rndIndex = Int(Rnd() * con.Count + 1)
arr(i) = con(rndIndex)
con.Remove rndIndex
Next/<code>
最後,將數據寫入Sheet2即可
<code>Sheet2.[A:A].ClearContents
Sheet2.[A1].Resize(NUM, 1) = Application.Transpose(arr)/<code>
效果如圖:
代碼如圖:
我將樣本數量定義為常量NUM,這樣做可以方便後期更改樣本數量,只要修改一處即可。
其實還有一個隨機抽取數據的方法,我們下期再講。
。。。
喜歡的朋友記得點贊關注哦,網友們如果在Excel中遇到問題都可以找我交流,也可以在評論區或私信告訴我你想看到的VBA辦公教程,我將在下期分享給大家,以後不定期更新Excel VBA技巧!
閱讀更多 VBA編程開發 的文章