網友問到一個 Excel 的問題:在以下的資料清單中,如果想要執行分組亂數重排,該如何設計公式?
以下圖為例,若每 20 個一組,整個資料清單有若干列(幾列都有可能),如何能在每一分組中,各自亂數重排。每按一次 F9 鍵,即可得到一個新的重排結果。
【公式設計與說明】
在工作表中我們需要一個輔助欄位,其中置入亂數,網友是提供了:=INT(RAND()*100)+ROW()/1000,其實如果需要亂數,只要使用=RAND()即可。
接著,我們要定義一個名稱:區間,
其參照設定為:=INT((ROW(工作表1!1:1)-1)/20)*20,其中的參數『20』,即為一組中的個數。
輸入公式:
儲存格F2:=OFFSET($C$2,MATCH(LARGE(OFFSET($B$2,區間,,20,),ROW(1:1)-
區間),OFFSET($B$2,區間,,20,),0)-1+區間,)
(1) OFFSET($B$2,區間,,20,):找出區間的儲存格範圍。
(2) LARGE(OFFSET($B$2,區間,,20,),ROW(1:1)-區間):找出區間中的第幾個最大值。
MATCH(第(2)式,第(1)式,0):找出區間中的第幾個最大值位於區間的第幾個位置。
最後,透過 OFFSET 函數查出該位置的儲存格內容。
儲存格G2:=OFFSET($D$2,MATCH(LARGE(OFFSET($B$2,區間,,20,),ROW(1:1)-
區間),OFFSET($B$2,區間,,20,),0)-1+區間,)
其中的參數『20』,均為一組中的個數。
複製儲存格F2:G2,往下各列貼上。該公式乃不管清單中有多少筆資料,皆可使用。
【補充說明】
儲存格F2的原始公式:
=OFFSET($C$2,MATCH(LARGE(OFFSET($B$2,INT((ROW(1:1)-1)/20)*20,,20,),
ROW(1:1)-INT((ROW(1:1)-1)/20)*20),OFFSET($B$2,INT((ROW(1:1)-1)/20)*20,,
20,),0)-1+INT((ROW(1:1)-1)/20)*20,)
如果改變一組中的數目,只要將參數『20』,改為每一組中的個數。

哈囉你好, 想請問套用公式時為何各區間內跑出的排序有些有重複,如區間1內有1-20,跑出結果可能有兩個2導致19不見等等?想請問要如何解決呢?
有辦法跟你請教問題嗎?
可以直接留言
假設B欄位是"7-15"不等的秒數,C欄位是工作順序"1-100",D欄位是工作內容"點膠"、"鎖螺絲"、"貼磚"等等如此,若預設點選45秒數,則B、C、D欄位會依"B欄位"自動排列聚集設定秒數嗎? 如不懂我所敘述的可以加我LINE:andychen2016