在工作中我們會經常遇到一些較為純粹的數學問題,比如要產生可控的30個不重複的隨機數,什麼意思呢?就是要產生一組30個的隨機數,這30個數是不重複的。但是要求這30個數的產生是可控的,就是說要在需要時實時產生。
這時我們要用到一個RANDBETWEEN函數,作為我們實現目的主要函數:還需要一個迭代運算的設置,下面我一一講解:
一:RANDBETWEEN函數:
返回大於等於指定的最小值,小於等於指定最大值之間的一個隨機整數。每次計算工作表時都將返回一個新的數值
定義:返回位於兩個指定數之間的一個隨機整數。 每次計算工作表時都將返回一個新的隨機整數。
語法:RANDBETWEEN(bottom,top)
Bottom參數: RANDBETWEEN將返回的最小整數。
Top參數: RANDBETWEEN將返回的最大整數。
二 另外為了實現這個功能,我們還需要用到迭代運算:
設置:工具》》選項》》重新計算》》勾選迭代運算,次數可以根據實際情況設置,我下面的例子是產生30個數,我設置的迭代次數是100就夠用了。
上面的內容準備好後,我們看今天的實例:
要求在30個單元格裡使用randbetween(1,500),隨機抽取產生1-500之間的任意數,這30個數中不要有出現重複的數。並要求在需要時實時產生.
首先我們在A1單元格中錄入下面的的公式:=IF(COUNTIF($A$1:$E$6,A1)=1,A1,RANDBETWEEN(1,500)),並一直拖滿到E6的單元格,正好是30個單元格的位置。公式講解:以A1單元格的公式為例,這個公式在A1單元格中出現一個隨機數RANDBETWEEN(1,500),當這個隨機數產生後,公式會有一個判斷,就是滿足:COUNTIF($A$1:$E$6,A1)=1也就是說要在$A$1:$E$6中和A1值相等的數是1個,當確實是1個時那麼不再變化,當不是1個的時候,那麼再次產生隨機數RANDBETWEEN(1,500),然後再次判斷,直到滿足條件為止。但最多的迭代次數是100次,即將產生最多100次的重複計算,所以這個最大的迭代次數很關鍵,如果選的小了,或許不會滿足我們的要求。
好,看下面的截圖:是一組已經產生了的不重複的30個數字:
問題寫道這裡,仿佛是寫完了,其實還沒有,上面的方法是產生了我們需要的30個數,但是題目要求是在需要的時候實時產生,這怎麼辦呢?我們再增加一個條件語句,即可達到此效果,公式如下: =IF(COUNTIF($A$1:$E$6,A1)=1,IF($G$1=1,RANDBETWEEN(1,500),A1),RANDBETWEEN(1,500))
此時G1為控制格,當在G1輸入數字1,就開始變化。但變化後的數據有可能不惟一了,怎麼辦?把1清除即可!
我們還是先把講解一下上面的公式:
IF($G$1=1,RANDBETWEEN(1,500),A1) 這部分是新增的判斷,也就是說,當數字是唯一的時候,且當G1不是1的時候才不發生變化,否則,只要是G1的單元格變化為1時,隨機數將重新產生。有些拗口,大家可以仔細的研究一下上的公式,是可以理解的。
我們看看下面的返回截圖:
果然出現了兩個重複的數值,我們把G1清空,再看下面的截圖:
好了,重複的消失了,這就達到了我們的目的,
當我們需要產生這樣的隨機數時,只需要在G1中錄入1,然後再刪掉.
今日內容回向:
1 RANDBETWEEN函數的意義是什麼?
2 如何隨機產生1-500之間的30個任意數中,不要有出現重複的數。並要求在需要是實時產生.