在 Excel 中要隨機且平均分配人員組別,最簡單的方法是利用 RAND 函數產生隨機碼作為輔助欄位,接著使用 RANK 函數進行排名,再透過 MOD 函數求餘數,最後用 INDIRECT 轉換為組別名稱。
今天阿湯又要來解答網友的問題了,給我的這個題目倒是有點難度,問題是這樣的:我想要將人員平均分配組別,且用隨機的方式來做。其實看起來好像很簡單,但其實頗難的,如果單純只是「隨機」分配很簡單,但如果同時要兼顧「平均」有點難度,阿湯思維了幾種做法後,想了一個盡可能簡單的做法給大家參考,用到的函數也都是常見且易用的,以便大家能夠理解,往下來看怎麼做吧。
Excel 隨機分組的準備工作與輔助欄位設定
要將人員隨機且平均分配到指定組別,最簡單的做法是利用輔助欄位產生隨機碼,再透過公式進行計算。
先給大家看一下要做的東西長這樣,假設人員有 A 到 O 共 15 位,我想要將他們平均分配到甲、乙、丙三個組別裡,等於每組是 5 人的話要怎麼做。
阿湯本來想用一行函數來全部搞定,但怕大家無法理解內容(很複雜),所以改用輔助的方式來做。
首先,請在右邊的 E 列先打入組別及名稱,這邊我以甲、乙、丙來示範。
接著,F 列是輔助用的隨機碼,這一列長度會和人員長度一樣。函式使用的是 RAND,請直接在 F2 儲存格輸入以下公式:
=RAND()
輸入完成後按下 Enter。
然後在 F2 將函數往下延伸,也就是把滑鼠移到 F2 欄位右下角,出現十字游標後,按住往下拖曳到 F16。這樣 F2 到 F16 就都會產生 RAND() 的隨機數值了。
利用 RANK 與 MOD 函數計算隨機平均分配結果
有了隨機碼之後,我們可以利用 RANK 函數進行排名,再透過 MOD 函數求餘數,將人員平均分配到對應的組別數量中。
接下來比較複雜的公式來了,我們在 C2 那欄輸入以下公式:
=INDIRECT("E"&((MOD(RANK(F2,$F$2:$F$16),3)+1)+1))
然後一樣從 C2 延伸公式到 C16(就是滑鼠移到 C2 欄位右下角會出現十字,按住後往下拖曳到 C16 即可)。
接下來說明一下公式,我們先講一下最裡面的 RANK 這一段:
=RANK(F2,$F$2:$F$16)
這是將 F2~F16 的隨機碼排名出來,會得到 1~15 名。所以單純打這一段會出現 1~15 的數字(大家可以試試)。
然後再透過 MOD 這個函數來處理排名:
=MOD(RANK(F2,$F$2:$F$16),3)+1
如果是打這一段,你會發現會顯示的就是 0~2 的數字。MOD 這是用來顯示餘數使用的,詳細用法可以參考 OFFICE 網站。透過這個函數,以 1~15 來說,除以 3 後會得到的餘數會是 0~2。如果你的組別是有五個,那公式裡的 3 就改成 5 就可以。
所以在原本的公式尾數多一個 +1,是為了把 0~2 補成 1~3。如果你不需要甲、乙、丙的組別名稱的話,其實到這個步驟就搞定了,就已經區分出 1~3 的隨機平均分配。
透過 INDIRECT 函數將數字轉換為組別名稱
若希望分組結果直接顯示為你設定的組別名稱,可以透過 INDIRECT 函數將剛剛算出的數字對應到 E 列的儲存格內容。
最後如果你想要直接將 E 列的甲、乙、丙直接帶入的話,最終公式就是長這樣:
=INDIRECT("E"&((MOD(RANK(F2,$F$2:$F$16),3)+1)+1))
或者
=INDIRECT("E"&(MOD(RANK(F2,$F$2:$F$16),3)+2))
INDIRECT 這個公式是用來顯示欄位值,比如 INDIRECT(E2),那就會顯示 E2 的值,也就是甲。我們剛剛 C 列做到 MOD 為止是顯示 1~3,但我們要指向的內容是 E2~E4,所以在公式尾巴多加了個 1(也就是把原本的 +1 改成 +2),這樣算出來就會是 2~4,搭配 "E" 就會變成 E2~E4,順利顯示 E 列的組別名稱了。
如何固定 Excel 隨機分組結果與人數驗證
完成分組後,由於 RAND 函數只要工作表有變動就會重新計算,因此必須將結果「選擇性貼上為值」來固定;同時也可以利用 COUNTIF 來驗證每組人數是否真的平均。
如果你想要驗證每個組別的人數是否有平均的話,可以在旁邊用 COUNTIF 這個函數來做。這部份阿湯就不特別解說了,COUNTIF 是非常簡易使用的一個函數。
最後完整的含驗證畫面就長這樣了。
如果你要分配的量是 15,但要分到四組,會無法整除也可以用嗎?是的,也可以,會像這樣,某一組別少一個人,但依然會盡可能平均分配。
由於阿湯是用 RAND 這個函數來做隨機取數,所以當你隨便輸入一格後,排列都會重新來過。因此,分完組別後要固定下來的話,請將 C 列的組別項目全部選取並複製起來。
然後在組別的第一個欄位(C2)點擊滑鼠右鍵,選擇「選擇性貼上」。
在跳出的視窗中,選擇「值」,然後按下確定。
這樣就會覆蓋原本的公式,變成單純的文字,就不會再變動了。固定好之後,後面的 DEF 列輔助欄位也都可以清空了。
文末說明一下為什麼要用 RAND() 來做隨機碼排列。因為 RAND() 產生的隨機值重複機率非常非常的低,當然如果你的樣本有 1 萬組的話,那可能有一點點的機會重複,但原則上很難。會用這方式來做的原因是,如果你是要隨機且不重複產生 1~15 的數字,公式其實也不是簡單就搞定,不如就用 RAND(),反正有加入 COUNTIF 驗證每組人數是否平均就好了,不用那麼麻煩。
提供給大家這篇文章的範例檔:請點我下載
常見問題
Excel 如何隨機且平均分配人員到不同組別?
可以先建立一個輔助欄位使用 RAND() 函數產生隨機碼,接著利用 RANK 函數進行排名,再透過 MOD 函數除以組別數量求餘數,就能達到隨機且平均分組的效果。
為什麼 Excel 隨機分組的結果會一直變動?
因為使用的是 RAND() 函數,只要工作表有任何變動或重新計算,隨機數值就會改變。要固定結果,只需將分組結果複製,並用「選擇性貼上」為「值」即可覆蓋公式。
如果總人數無法被組別數量整除,這個分組公式還適用嗎?
依然適用。如果人數無法整除(例如 15 人分 4 組),公式會自動盡可能平均分配,只會出現某一組別少一個人的情況,不會造成錯誤。
如何在 Excel 中驗證各組分配到的人數是否平均?
可以在旁邊的空白欄位使用 COUNTIF 函數,選取分組結果的範圍並指定各組別名稱作為條件,就能快速計算出每一組實際分配到的人數。
(本文於 2026 年 10 月更新:補充步驟說明與常見問題)




