1、生成隨機數字
(1)生成隨機數比較簡單,=rand()即可生成0-1之間的隨機數;
(2)如果要是整數,就用=int(rand())*10,表示0至9的整數,以此類推;
(3)如果要生成a與b之間的隨機實數,就用=rand()*(b-a)+a,如果是要整數就用=int(rand()*(b-a))+a;稍微擴充一下,就能產生固定位數的整數了。
注意:如果要使用函式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+97)))))
4、隨機不重複數字序列的生成方法
有些情形下,我們需要生成一個不重複的隨機序列。
比如:我們要模擬洗牌,將一副撲克牌去掉大小怪後剩下的52張打亂。
比較笨的方法是在1-52間每生成一個隨機數後,檢查該隨機數是否出現過,如果是第一次出現,就放到序列裡,否則重新生成一個隨機數作檢查。在excelworksheet裡面用這種辦法,會造成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))"。
分項解釋:
a:ROW()=C$54,如果當前行等於當前交換所排的序號
b:INDEX(B$1:B$52,INDEX($A$1:$A$52,C$54)),返回在B1到B52中選擇A1:A52中的第C54個值
c:IF(ROW()=INDEX($A$1:$A$52,C$54),否則的話,如果當前行等於A1:A52中第C54個值,則:
d:INDEX(B$1:B$52,C$54),返回B1:B52中的第C54個值
e:若以上條件都不滿足,則返回B1
(5)將C1複製到C1:BA52這個區域裡面
(6)在BA1:BA52中,我們就得到了一個不重複的隨機序列,按F9可以生成一個新序列。
1、生成隨機數字
(1)生成隨機數比較簡單,=rand()即可生成0-1之間的隨機數;
(2)如果要是整數,就用=int(rand())*10,表示0至9的整數,以此類推;
(3)如果要生成a與b之間的隨機實數,就用=rand()*(b-a)+a,如果是要整數就用=int(rand()*(b-a))+a;稍微擴充一下,就能產生固定位數的整數了。
注意:如果要使用函式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+97)))))
4、隨機不重複數字序列的生成方法
有些情形下,我們需要生成一個不重複的隨機序列。
比如:我們要模擬洗牌,將一副撲克牌去掉大小怪後剩下的52張打亂。
比較笨的方法是在1-52間每生成一個隨機數後,檢查該隨機數是否出現過,如果是第一次出現,就放到序列裡,否則重新生成一個隨機數作檢查。在excelworksheet裡面用這種辦法,會造成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))"。
分項解釋:
a:ROW()=C$54,如果當前行等於當前交換所排的序號
b:INDEX(B$1:B$52,INDEX($A$1:$A$52,C$54)),返回在B1到B52中選擇A1:A52中的第C54個值
c:IF(ROW()=INDEX($A$1:$A$52,C$54),否則的話,如果當前行等於A1:A52中第C54個值,則:
d:INDEX(B$1:B$52,C$54),返回B1:B52中的第C54個值
e:若以上條件都不滿足,則返回B1
(5)將C1複製到C1:BA52這個區域裡面
(6)在BA1:BA52中,我們就得到了一個不重複的隨機序列,按F9可以生成一個新序列。