在 Excel 中,生成隨機(jī)數(shù)有兩個(gè)函數(shù),分別為Rand函數(shù)和RandBetween函數(shù),前者用于生成 0 到 1 之間的隨機(jī)數(shù),后者用于生成指范圍的隨機(jī)數(shù)。它們生成的隨機(jī)數(shù)中都會(huì)產(chǎn)生重復(fù)值,如果要生成不重復(fù)的隨機(jī)數(shù)得用變通的方法,通常有兩種方法,一種為先生成種子再生成不重復(fù)的隨機(jī)數(shù),另一種為用多個(gè)函數(shù)生成。以下就是Excel生不重復(fù)隨機(jī)數(shù)和小數(shù)隨機(jī)數(shù)的具體操作方法,實(shí)例中操作所用版本均為 Excel 2016。
(一)Rand函數(shù)
1、表達(dá)式:RAND()
2、說(shuō)明:RAND() 用于生成 0 到 1 之間均勻分布的隨機(jī)數(shù)。如果要生成指定范圍的隨機(jī)數(shù),表達(dá)式可以這樣寫:RAND()*(b-a) + a。
(二)RandBetween函數(shù)
1、表達(dá)式:RANDBETWEEN(bottom, top)
2、說(shuō)明:RandBetween 用于生成指定范圍的隨機(jī)數(shù),bottom 為生成隨機(jī)數(shù)的開(kāi)始值,top 為生成隨機(jī)數(shù)的最大值。例如:要生成 10 到 100 的隨機(jī)數(shù),可以這樣寫:RANDBETWEEN(10, 100)。
(一)用 RAND() 生成小數(shù)隨機(jī)數(shù)
1、選中 A1 單元格,輸入公式 =RAND(),按回車,則生成一個(gè)小數(shù)隨機(jī)數(shù);再次選中 A1,把鼠標(biāo)移到 A1 右下角的單元格填充柄上,按住左鍵,往下拖,則所經(jīng)過(guò)單元格都用 A1 的值填充,按 Ctrl + S 保存,則每個(gè)單元格變?yōu)樾律傻碾S機(jī)數(shù);操作過(guò)程步驟,如圖1所示:
圖1
2、用 Rand() 生成指定范圍的隨機(jī)數(shù)
假如要生成 1 到 100 的隨機(jī)數(shù)。選中 A1 單元格,把公式 =RAND()*(100 - 1) + 1 復(fù)制到 A1,按回車,則生成一個(gè) 1 到 100 之間的隨機(jī)數(shù);同樣方法往下拖并保存生成其它隨機(jī)數(shù),操作過(guò)程步驟,如圖2所示:
圖2
(二)用 RandBetween() 生成指定范圍的隨機(jī)數(shù)
假如要生成 50 到 100 之間的隨機(jī)數(shù)。選中 A1 單元格,把公式 =RANDBETWEEN(50, 100) 復(fù)制到 A1,按回車,生一個(gè) 50 到 100 之間的隨機(jī)數(shù);同樣用往下拖并保存的方法生成其它隨機(jī)數(shù),操作過(guò)程步驟,如圖3所示:
圖3
(一)方法一:先生成種子再生成不重復(fù)的隨機(jī)數(shù)
1、生成不重復(fù)的小數(shù)隨機(jī)數(shù)。選中 A1 單元格,輸入公式 =RAND(),按回車,則生成一個(gè)隨機(jī)數(shù),把鼠標(biāo)移到 A1 的單元格填充柄上并往下拖,然后 Ctrl + S 保存,生成其它隨機(jī)數(shù);選中 B1 單元格,輸入公式 =RAND()*A1,按回車,則生成一個(gè)不重復(fù)隨機(jī)數(shù),同樣方法往下拖并保存,生成其它不重復(fù)隨機(jī)數(shù);操作過(guò)程步驟,如圖4所示:
圖4
2、生成不重復(fù)的整數(shù)隨機(jī)數(shù)
A、假如要生成 10 到 100 之間的不重復(fù)隨機(jī)數(shù)。把公式 =RANDBETWEEN(10,100) 復(fù)制到 A1 單元格,按回車,生成一個(gè)隨機(jī)數(shù);用往拖并保存的方法生成其它隨機(jī)數(shù);把公式 =INT(RANDBETWEEN(10,100)*A1/100) 復(fù)制到 B1 單元格,按回車,生成一個(gè)不重復(fù)的隨機(jī)數(shù),同樣用往下拖的方法,生成其它不重復(fù)的隨機(jī)數(shù);操作過(guò)程步驟,如圖5所示:
圖5
B、公式說(shuō)明:公式 =INT(RANDBETWEEN(10,100)*A1/100) 先用 RANDBETWEEN 求出 10 到 100 之間的隨機(jī)數(shù),然后乘 A1 中的隨機(jī)數(shù),再除以 100 以確保所求隨機(jī)數(shù)在 10 至 100 之間,最后用 Int 函數(shù)取整。
提示:這個(gè)方法不能確保絕對(duì)不生成重復(fù)的隨機(jī)數(shù),當(dāng)每次生成的隨機(jī)數(shù)有兩組完全相同時(shí),同樣會(huì)生成重復(fù)的隨機(jī)數(shù)。例如,A2 和 B2 生成的隨機(jī)數(shù)與 A5 和 B5 生成的隨機(jī)數(shù)相同,那么 B2 = A2 × RAND() 等于 B5 = A5 × RAND(),則在 B2 與 B5 生成的隨機(jī)數(shù)相同。
(二)方法二:用公式生成準(zhǔn)確不重復(fù)隨機(jī)數(shù)
1、假如要生成 1 到 10 之間的不重復(fù)隨機(jī)數(shù)。把公式 =SMALL(IF(COUNTIF($A$1:A1,ROW($1:$10))=0,ROW($1:$10)),INT(RAND()*(10-ROW(1:1))+1)) 復(fù)制到 A2 單元格,按 Ctrl + Shift + 回車,則生成一個(gè) 1 到 10 之間的不重復(fù)隨機(jī)數(shù);把鼠標(biāo)移到 A2 的單元格填充柄上并往下拖,然后保存,則生成 1 到 10 之間的其它不重復(fù)隨機(jī)數(shù);操作過(guò)程步驟,如圖6所示:
圖6
2、公式說(shuō)明
A、$A$1:A1 中的 $A$1 表示絕對(duì)引用,A1 表示相對(duì)引用,即往下拖時(shí),$A$1 始終不變,A1 則會(huì)變?yōu)?A2、A3 等。
B、ROW($1:$10) 是對(duì)一組單元格的引用,返回一個(gè) 1 到 10 的數(shù)組,即 {1;2;3;4;5;6;7;8;9;10}。
C、ROW(1:1)是對(duì)一個(gè)單元格的引用,返回一個(gè)一行一列的數(shù)組,往下拖時(shí)會(huì)變?yōu)?ROW(2:2)、ROW(3:3) 等。
D、用公式求值查看公式執(zhí)行過(guò)程
選中 A2 單元格,選擇“數(shù)據(jù)”選項(xiàng)卡,單擊“公式求值”,打開(kāi)“公式求值”窗口,單擊一次“求值”,則計(jì)算一步。第一次單擊“求值”,把公式中的 ROW($1:$10) 變?yōu)?{1;2;3;4;5;6;7;8;9;10},
E、逆向解析公式執(zhí)行過(guò)程
1)公式執(zhí)行到最后一步變?yōu)?=SMALL({1;2;3;4;5;6;7;8;9;10},8},如圖8所示:
圖8
2)公式 =SMALL({1;2;3;4;5;6;7;8;9;10},8} 的意思是:從數(shù)組 {1;2;3;4;5;6;7;8;9;10} 中找出第8小的數(shù),即為 8;也就是說(shuō)前面步驟所要做的工作就要生成數(shù)組 {1;2;3;4;5;6;7;8;9;10} 和生成序號(hào) 8。
3)IF(COUNTIF($A$1:A1,ROW($1:$10))=0,ROW($1:$10)) 負(fù)責(zé)生成數(shù)組 {1;2;3;4;5;6;7;8;9;10},INT(RAND()*(10-ROW(1:1))+1) 負(fù)責(zé)生成序號(hào) 8。
4)COUNTIF($A$1:A1,ROW($1:$10) 是統(tǒng)計(jì)數(shù)組 {1;2;3;4;5;6;7;8;9;10} 每個(gè)元素在 A1 中出現(xiàn)的個(gè)數(shù),A1 單元格為空,因此,統(tǒng)計(jì)結(jié)果全為 0,即{0;0;0;0;0;0;0;0;0;0},如圖9所示:
圖9
再看 A4 單元格中的同樣步驟(選中 A4,打開(kāi)“公式求值”窗口,點(diǎn)“求值”一直到與圖9一樣的步驟),第 1、3 個(gè)元素為 1,即 {1;0;1;0;0;0;0;0;0;0},為什么第 1、3 個(gè)元素為 1,其它元素為 0?,因?yàn)?1 和 3 已經(jīng)生成了隨機(jī)數(shù),即 A2 和 A3 中的隨機(jī)數(shù),如圖10所示:
圖10
繼續(xù)往后執(zhí)行,1 會(huì)變?yōu)?False,0 會(huì)變 True,如圖11所示:
圖11
也就是為 False 的,就不會(huì)再?gòu)?ROW($1:$10)(即 {1;2;3;4;5;6;7;8;9;10})返回元素,如圖12所示:
圖12
當(dāng)用 Small 從{False;2;False;3;4;5;6;7;8;9;10} 返回元素時(shí),只從數(shù)字中返回,F(xiàn)alse 將被忽略。
5)RAND()*(10-ROW(1:1))+1 表示生成 1 到 10 之間的隨機(jī),可參照 Rand() 生成指定范圍(a 到 b)的隨機(jī)數(shù)公式 RAND()*(b-a) + a;最后用 Int函數(shù)取整。
3、如果要生成 10 到 100 之間的不重復(fù)隨機(jī)數(shù),公式可以這樣寫:
=SMALL(IF(COUNTIF($A$10:A10,ROW($10:$100))=0,ROW($10:$100)),INT(RAND()*(90-ROW(10:10))+1)),如圖13所示:
圖13
按 Ctrl + Shift + 回車,則生成一個(gè) 10 到 100 之間的隨機(jī)數(shù),用往下拖的方法生成其它 10 到 100 之間的隨機(jī)數(shù),結(jié)果如圖14所示:
圖14
注意:把公式復(fù)制到 A11 單元格和公式中修改的項(xiàng),如 $A$10:A10、ROW($10:$100) 和 90-ROW(10:10)。
聯(lián)系客服