?

基于Excel的隨機信息抽取工具

2019-05-23 10:44張亮
電腦知識與技術 2019年5期

張亮

摘要:在日常工作中,我們需要抽取一些隨機的信息,比如選擇招投標代理機構、內部專家、供應商等。通過在Excel中建立這些信息庫,利用VBA和單元格輸入抽取的參數即可實現信息的快速隨機抽取。

關鍵詞:Excel信息庫;隨機;抽??;

中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2019)05-0208-01

在日常工作中,我們需要抽取一些隨機的信息,如招投標代理機構、內部專家、供應商等,為了盡可能的公平,本人在Excel中建立了相關的信息庫,并通過選擇相關的信息分類,設置抽取的數量,實現了基于Excel的抽取工具。

1 建立信息庫

下面以內部專家為例,建立一個內部專家的工作表,并通過透視表或去重的方式將類別再獨立放在一列。這列將用于數據有效性中的序列,用來選擇相關類別。專家表如圖1所示。

2 實現抽取

抽取的效果如圖2所示,左邊是抽取的結果,右邊抽取的設置和按鍵。在左邊選好類別后,庫內的數量會自動計算出來,如果輸入的抽取數量大于庫內數量,則會提示重新輸入。抽取數量輸好后,點擊抽取,后臺函數會將選擇類別的所有專家查詢出來,在右邊的現實區域輪轉,直到點擊停止后,系統按照隨機的規則抽出選中數量的專家數,這樣就完成了數據的抽取工作。以下是實現抽取的具體介紹。

左邊的抽取類別中,采用數據有效性中的序列,將內部專家表中的類別列設置成序列,即可進行類別的選擇。庫內數量使用公式:COUNTIF(信息庫!B:B,抽??!I2)可自動計算專家庫中相應類別的專家數量。抽取數量依然采用數據有效性進行限制:限制其區間為1至庫內數量即可。具體的抽取,則采用了Excel的隨機函數。在Excel中有2個隨機數生成的函數Rand和Randbetween,Rand函數可以生成0~1之間的隨機小數,RANDBETWEEN函數可以隨機生成指定范圍的隨機整數。通過Excel函數功能也可以實現抽取功能,但需每次手工操作,這里我們采用了VBA函數實現了抽取效果。如果程序中如果只用Rand取隨機數時,每次執行都會產生相同的隨機數序列。在VBA中,可以通過Randomize語句,讓每次執行程序產生不同的序列,這樣最大可能地避免重復抽取到一個人。代碼中通過循環將獲取到的隨機值與專家序號進行組合并排序,在右邊區域顯示,這樣得到了一個滾動顯示的效果,直到按下停止按鈕,抽取的一定數量專家顯示在右邊區域。抽取功能的主要VBA代碼如下所示:

Set cnn = CreateObject("adodb.connection")

mybook = ThisWorkbook.FullName

Range("a3:g200").ClearContents

sqlc1 = Sheets("抽取").Range("I2")

p = 0

cnn.Open "Provider = Microsoft.Jet.Oledb.4.0;Extended Properties =Excel 8.0;Data Source =" & mybook

Dim r

Dim i

For i = 1 To 10000

Randomize

r = Rnd

sql = "select * from [信息庫$a1:g100] where 類別='" & sqlc1 & "'and 序號 is not null order by rnd(" & r & "-序號)"

Range("A3").CopyFromRecordset cnn.Execute(sql)

DoEvents

If p = 1 Then Set cnn = Nothing: Exit Sub

Next

3 結束語

經過多次測試和使用,該工具運行正常,操作簡單,而且信息庫維護方便,提高了日常信息抽取的工作效率,又確保了各項抽取工作的公平、公正、公開的目的。

參考文獻:

[1] Excel Home. 別怕, Excel VBA其實很簡單[M]. 北京:人民郵電出版社, 2014.

[2] Excel Home. Excel 2016函數與公式應用大全[M]. 北京: 北京大學出版社, 2018.

【通聯編輯:張薇】

91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合