Excel VBA 之 隨機抽取數據

有時候我們在做統計的時候,可能會遇到提取樣本的需求,提取樣本最重要的當然是隨機性,今天我就來講一下該如何用VBA實現隨機提取一些數據。

例子:從Sheet1隨機抽取5名人員,名單填入Sheet2


Excel VBA 之 隨機抽取數據

例子

想到隨機,那麼我們一般就要用到Rnd函數,首先我們看一下官網上Rnd函數的介紹


Excel VBA 之 隨機抽取數據

官網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>

效果如圖:

Excel VBA 之 隨機抽取數據

最終效果

代碼如圖:

Excel VBA 之 隨機抽取數據

代碼全貌

我將樣本數量定義為常量NUM,這樣做可以方便後期更改樣本數量,只要修改一處即可。

其實還有一個隨機抽取數據的方法,我們下期再講。

。。。


喜歡的朋友記得點贊關注哦,網友們如果在Excel中遇到問題都可以找我交流,也可以在評論區或私信告訴我你想看到的VBA辦公教程,我將在下期分享給大家,以後不定期更新Excel VBA技巧!


分享到:


相關文章: