工作需要,需要excel生成隨機數,但隨機數需要概率出現,比如:14-16的隨機數,但需要滿足14-14.5,14.5-15.5,15.5-16出現的概率爲10%,80%,10%的要求。
先上結果:
=IF(MATCH(RAND(),{0,0.1,0.9})=2,ROUND(RAND()+14.5,1),IF(RAND()>0.5,ROUND(RAND()*0.5+14,1),ROUND(RAND()*0.5+15.5,1)))
這裏有幾個公式:
1、先說最核心的match()
用法:MATCH(lookup_value, lookup_array, [match_type])
說明:在lookup_array 中搜索lookup_value ,並返回對應的位置。但這裏重點在match_type,可以取三個值:-1,0,1。1爲缺省值,MATCH 查找小於或等於 lookup_value 的最大值。
如:=MATCH(0.4,{0,0.1,0.9}),表示在{0,0.1,0.9}中查找小於或等於0.4的最大值,即0.1。0.1在數組中位於第2位,則這個公式的結果爲2。
對lookup_value 不同取值,可以列出以下表格:
A | B | C |
搜索 |
公式 |
結果 |
0 | =MATCH(A2,{0,0.1,0.9}) | 1 |
0.1 | =MATCH(A3,{0,0.1,0.9}) | 2 |
0.2 | =MATCH(A4,{0,0.1,0.9}) | 2 |
0.3 | =MATCH(A5,{0,0.1,0.9}) | 2 |
0.4 | =MATCH(A6,{0,0.1,0.9}) | 2 |
0.5 | =MATCH(A7,{0,0.1,0.9}) | 2 |
0.6 | =MATCH(A8,{0,0.1,0.9}) | 2 |
0.7 | =MATCH(A9,{0,0.1,0.9}) | 2 |
0.8 | =MATCH(A10,{0,0.1,0.9}) | 2 |
0.9 | =MATCH(A11,{0,0.1,0.9}) | 3 |
通過這個表可以看出,1有10%概率出現,2有80%概率出現,3有10%概率出現。
如果說要滿足20%,60%,15%,5%的概率,那麼可以構造數組爲{0, 0.2, 0.8, 0.95},數組相鄰元素的差值則爲出現的概率。
2、公式rand()
用法:rand()
說明:RAND 返回了一個大於等於 0 且小於 1 的平均分佈的隨機實數。 每次計算工作表時都會返回一個新的隨機實數。
配合match(),=MATCH(RAND(),{0,0.1,0.9})公式的結果1,2,3出現的概率爲10%,80%,10%。
rand()產生[0,1)的值,如果生成一個範圍值,公式則爲rand()*(max-min)+min,如生成一個14-16範圍的隨機數,公式爲=rand()*2+14
3、公式round()
用法:ROUND(number, num_digits)
說明:函數將數字四捨五入到指定的位數。
=round(rand()*2+14,1),則表示對14-16範圍的隨機數保留一位小數。
4、公式if()
用法:IF(logical_test, value_if_true, [value_if_false])
說明:如果logical_test 爲真,則返回value_if_true ,否則返回value_if_false
公式講解完畢,那麼現在一步一步寫公式。從裏往外寫:
=RAND(),表示產生[0,1)隨機數。
=MATCH(RAND(),{0,0.1,0.9}),表示產生1,2,3三個數,出現概率爲10%,80%,10%
=IF(MATCH(RAND(),{0,0.1,0.9})=2,"22","11"),表示如果MATCH(RAND(),{0,0.1,0.9})等於2,則結果爲22,否則爲11。這裏是有80%結果爲22,20%爲11。下面來把20%概率平分。
=IF(MATCH(RAND(),{0,0.1,0.9})=2,"22",IF(RAND()>0.5,"11","33")),這樣,11,22,33三種結果的概率爲10%,80%,10%
回到主題,產生14-14.5,14.5-15.5,15.5-16範圍隨機數並保留一位小數的公式分別爲round(rand()*0.5+14,1),round(rand()*1+14.5,1),round(rand()*0.5+15.5,1),將其分別替換"11","22","33",則最終公式爲:
=IF(MATCH(RAND(),{0,0.1,0.9})=2,round(rand()*1+14.5,1),IF(RAND()>0.5,round(rand()*0.5+14,1),round(rand()*0.5+15.5,1)))
--
bin.xu
2020.04.27 錦採