隨機函式就是隨機產生數的函式,是excel中很重要的函式。比較簡單,格式為“=rand()”,無引數,其結果是生成0-1之間的隨機數。
一、幾種常見用法:
1、生成隨機數字
(1)生成0-1之間的隨機數字
這是最基本的用法,但比較簡單,在任意單元格輸入“=rand()”,即可生成0-1之間的隨機數。
(2) 生成0-9之間的隨機整數
這要與取整函式聯合應用。在任意單元格輸入“=int(rand()*10)”, 即可生成0至9的整數,以此類推;
(3)生成a與b之間的隨機實數
還是與取整函式聯合應用。在任意單元格輸入“=rand()*(b-a)+a”, 即可生成生成a與b之間的隨機實數。
(4)生成a與b之間的隨機整數
還是與取整函式聯合應用。在任意單元格輸入”“=int(rand()*(b-a))+a”即可。
(5) 生成固定位數的隨機整數
以三位整數為例,其餘類推。
在任意單元格輸入“=int(rand()*1000)”即可。
注意:如果要使用函式rand()生成一隨機數,並且使之不隨單元格計算而改變,可以在編輯欄中輸入“=rand()”,保持編輯狀態,然後按f9,將公式永久性地改為固定數字。不過,這樣只能一個一個的永久性更改,如果數字比較多,也可以全部選擇之後,另外選擇一個合適的位置貼上,貼上的方法是點選右鍵,選擇“選擇性貼上”,然後選擇“數值”,即可將之前複製的隨機數公式產生的數值(而不是公式)複製下來!
2、產生隨機字母
隨機小寫字母:“=char(int(rand()*26)+97)”
隨機大寫字母:“=char(int(rand()*26)+65)”
隨機大小寫混合字母:
“=char(int(rand()*26)+if(int(rand()*2)=0,65,97))”
3、產生隨機的六位數的字母和數字混合
=concatenate(if(int(rand()*2)=0,char(int(rand()*9+48)),if(int(rand()*2)=0,char(int(rand()*25+65)),char(int(rand()*25+97)))),if(int(rand()*2)=0,char(int(rand()*9+48)),if(int(rand()*2)=0,char(int(rand()*25+65)),char(int(rand()*25+97)))),if(int(rand()*2)=0,char(int(rand()*9+48)),if(int(rand()*2)=0,char(int(rand()*25+65)),char(int(rand()*25+97)))),if(int(rand()*2)=0,char(int(rand()*9+48)),if(int(rand()*2)=0,char(int(rand()*25+65)),char(int(rand()*25+97)))),if(int(rand()*2)=0,char(int(rand()*9+48)),if(int(rand()*2)=0,char(int(rand()*25+65)),char(int(rand()*25+97)))),if(int(rand()*2)=0,char(int(rand()*9+48)),if(int(rand()*2)=0,char(int(rand()*25+65)),char(int(rand()*25+974、隨機不重複數字序列的生成方法一
有些情形下,我們需要生成一個不重複的隨機序列。比如:我們要模擬洗牌,將一副撲克牌去掉大小怪後剩下的52張打亂。
比較笨的方法是在1-52間每生成一個隨機數後,檢查該隨機數是否出現過,如果是第一次出現,就放到序列裡,否則重新生成一個隨機數作檢查。在 excel worksheet裡面用這種辦法,會造成if多層巢狀,不勝其煩,在vba裡面做簡單一些,但是效率太差,越到序列的後端,效率越差。
當然也有比較好的辦法,在vba裡面,將a(1)-a(52)分別賦予1-52,然後做52次迴圈,例如,第s次生成一個1-52間的隨機數r,將a(s)與a(r)互換,這樣的話,就打亂了原有序列,得到一個不重複的隨機序列。vba裡這個演算法是很容易實現的,但是,出於通用性和安全考慮,有的時候我們並不希望用vba。
我們來看看在worksheet裡面如何利用內建函式實現這個功能。
(1)在a1-a52間填入"=int(rand()*52)+1",產生1-52間的隨機數,注意這裡是有重複的。
(2)在b1-b52間填入1-52
(3)在c54-bb54填入1-52
(4)在c1填入
"=if(row()=c$54,index(b$1:b$52,index($a$1:$a$52,c$54)),if(row()=index($a$1:
$a$52,c$54),index(b$1:b$52,c$54),b1))"。
二、隨機抽查
隨機函式的應用很廣,比如可以用來做隨機抽查。舉一個我在“”回答問題時遇到的例子。
有126個公式生成的資料,我現在需要隨機從這126個數值中抽取5個連續10次。
我是這樣回答的:
假設126個資料放在a1--a126單元格中,在b1中輸入“=indirect("a"&int(rand()*126+1))”,
在b1:f5拖拽複製公式即可。
不過,記得將取出的數必須及時貼上數值到其它位置,因為每次運算元都會變化.且有一定的機率會出現同組。