當前位置:
首頁 > 職場 > 關於Excel隨機取值,你不可不知的解決方案

關於Excel隨機取值,你不可不知的解決方案

所謂隨機取值,顧名思義就是從一堆數里,隨機抽取幾個或幾組數;常用於抽獎、抽查、數據隨機分組等。

舉個栗子,如下圖所示,A2:A21是EH培訓學院的20名……男女。現在需要從中隨機抽取3人,授予38婦女紅旗手的稱號,並獎勵老祝香吻一枚。

(,這誰出的騷主意,為啥男士也會被授予38紅旗手,還被送男人的……香吻???)

解法1:輔助列法

使用輔助列,解決此類問題,應是最簡單較快捷的一種解法,基本上老少咸宜,稍有函數公式基礎就可以掌握了。

首先將C列作為輔助列,C2輸入以下公式,並複製填充至C2:C21區域。

=RAND()

RAND函數生成大於等於0、小於1的隨機數。

其次,在E2單元格輸入以下公式,複製填充至F2:F4區域即可得到抽獎結果了。

=INDEX(A:A,MATCH(LARGE(C:C,ROW(A1)),C:C,))

LARGE(C:C,ROW(A1)),隨著公式向下填充,依次從C列里提取第1、2、3最大的數值;再使用INDEX+MATCH的查詢套路得出結果。

結果可能如下:

聳肩,攤手:現在問題來了——請問老祝如何親吻老祝呢?

想想都太有挑戰性了。哈哈哈。

解法2:一條公式

好伐,打個響指,那能不能只用一條函數公式得出最終結果?

當然也可以,只是稍顯複雜。

選取E2:E4單元格區域,使用數組三鍵(同時按下Ctrl+Shift+Enter)輸入以下公式,即可得出結果。

=INDEX(A:A,RIGHT(SMALL(RANDBETWEEN(1^ROW(2:21),99)/1%+ROW(2:21),ROW(1:3)),2))

RANDBETWEEN(1^ROW(2:21),99),隨機取得>=1且

之後除以1%,將隨機值放大百倍,再加上人名所在行的行號(+ROW(2:21)),使用SMALL函數依次從小到大取值,使用RIGHT函數重新取出行號,最後使用INDEX函數得出抽獎結果。

敲黑板!注意這是一條區域數組公式。

公式的計算原理其實是醬紫;

我們把20位男女所在的行號,看成是座位號。我們對座位號隨機加上不同的權重,然後重新進行排隊(升序用small,降序用large),得到一個打亂了的座號排列結果,最後依次將人名取出即可。

公式計算結果可能如下:

——挑眉!震驚!震驚!!老祝居然如何自戀!自吻3×2次。天啦嚕~哈哈哈。

解法3:洗牌吧

VBA的解法也有多種,最不用動腦的是字典法,但效率偏差,此處略過不提。

嗯,分享下最有效率也最有擴展性的洗牌法。

先講個故事,憋走開……

假設有一名班花,有一天早晨想鬥地主,目前的情況很明顯是一缺三,於是打算從全班20位同學裡隨機抽3人。班花把他們喊出教室,排成一字縱隊。

第一步,從20人里隨機抽取1人。假設抽到的是排在第15位的「隨風小妞」。把她揪出來,拖到第1位去,然後把原本排在第1位的某童鞋安排到第15位去。這樣,就成功抽取了一名……牌友。現在是2缺2。

第二步,從排在第2位和第20位之間的童鞋裡再隨機抽取一人——為什麼不是從第1位開始抽呢?

「隨風小妞」舉手回答說她已經被抽過了,不能被抽第二次(意思就是她不欠抽了)。

假設這次抽到了排在第6位的「空空」,把她請出來,送到第2位去,再把原本排在第2位的某同學安排到第6位。現在是3缺1了。

第3步,從第3位到第20位之間的童鞋再隨機抽取1人,排到第3位去。這樣,隊伍里的前3名就是今天的牌友了。恩,加上班花,4人剛好,散隊,打牌去。

是的,現在,只要我們把上面的故事翻譯成VBA代碼,之前的示例問題也就解決了。

代碼如下:

Sub ehkjxg()

Dim r, i&, t, x&

Randomize 隨機種子初始化

r = [a2:a21] 將學生喊出教室,裝入數組r

For i = 1 To 3 抽3個人

x = Int(Rnd() * (UBound(r) - i + 1)) + i

依次從第1~2……位置起隨機抽取學生

t = r(x, 1) 被抽中的學生出列

r(x, 1) = r(i, 1) 前列的學生去被抽中學生的位置

r(i, 1) = t 被抽中的學生站到前排去

Next

[e2].Resize(3, 1) = r』將隊伍的前3名學生(抽取結果)放入抽獎區

End Sub

或許有人問,為什麼一定要把抽出來的牌友放到隊伍前面去?放到隊伍後面行不行?另起一隊行不行?其實都可以。

這不是問題的關鍵。問題的關鍵在於,每抽出一位牌友,他原來的位置務必不能留空,可以由隊前或隊尾的人補進來。這樣,隨機取值的範圍漸漸收窄,不白抽,亦不抽錯。

暫停5秒——寫到這兒,天熱的我腦袋有點斷片,想不起該寫或解釋什麼了。囧。。。

打個哈欠,那就這樣吧,再說也都煙消雲散了。

最後照例留個練手題,將示例中的20個人名,隨機分為5組,人名不可重複。

方法不限,函數、透視表、VBA等均可。答對有獎——打個響指,沒錯兒,當然是獎老祝飛吻一枚啦。

我是星光,揮手作別,有閑再見吧。

圖文作者:看見星光

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Excel之家ExcelHome 的精彩文章:

高大上的Excel圖表,竟然這麼簡單
Excel工作表提取不重複數據,職業表親必備五招
Excel圖表還能做成這樣,你咋不上天呢
學Excel必須要掌握的「星級」教程
自從用上這些Excel 2016新增函數,工作就像開了掛!

TAG:Excel之家ExcelHome |

您可能感興趣

關於 Palace 你也許不知的 7 件事
iphone也可以快充,你還不知道嗎?
不知不覺!AirPods 2 即將來襲,相關爆料大總結!
不細心都不知道,這些iPhone冷知識你應該沒見過
Kindle 的這些技巧你可能不知道,它可以極大提升使用體驗
為你揭秘cc霜怎麼用才正確 有效步驟你不得不知
關於一些蘋果手機你不知道的事:使用iPhone的6大誤區,都別犯上
macOS的軟體可以在你不知情的情況下截取屏幕
你聽過他的歌,遺憾的是你不知道唱它的Denny white
「White wine」 可不是 「白酒」!不知道也是尷尬!
《Fate/Grand Order》:熱度掉不掉我不知道,梅林是真抽不到!
不能錯過的大葡萄,不能不知道的歐緹麗Caudalie
半個娛樂圈集結,為《信中國》強勢打call,背後的故事你不可不知
你還不知道Spring cloud是幹什麼的,那你就out了
Android O 有多少人沒吃上我不知道,但 Android P 確實快放出來了
steam專屬掌機你知道嗎,不知道別說你玩steam
關於蹴鞠,你不可不知的常識
iPhone SE手機你不知道的秘密,下一代將改寫蘋果!
csgo你不知道的那些事
iPhone內存不知不覺就滿了,都是哪裡來的?