1,用法
語法:Rnd[(數字)]
如果number的值由Randomize生成。
小於0,每次使用number作為隨機數種子都會得到相同的結果。
如果大於0,則前壹個隨機數將用作種子來生成下壹個隨機數。
等於0,產生與最近生成的隨機數相同的隨機數。
省略,前壹個隨機數作為種子生成下壹個隨機數(同大於0)。
描述:
Rnd函數返回小於1但大於或等於0的值。
值$ number決定了Rnd如何生成隨機數。
對於初始給定的種子,也會生成相同的序列,因為每次調用Rnd函數時,序列中的前壹個數都會作為下壹個數的種子。
在調用Rnd之前,隨機數生成器用壹個不帶參數的random語句初始化(如果有參數,會生成壹個與參數對應的特定隨機數序列),生成器有根據系統定時器獲取的種子。如果不使用Randomize語句,每次執行程序時生成的隨機數序列是相同的。
當Rnd後面跟壹個負數時,從同壹個參數可以得到兩個相同的序列。比如執行rnd -1之後,rnd取1000個隨機數,然後執行rnd -1,然後rnd取1000個隨機數,和前面壹樣。為了得到不同的序列,可以使用不同的負數,也可以在rnd -1之後執行隨機化編號。註意,為了得到相同的序列,隨機化兩次後的數字必須相同。這種方法的用途之壹是用於加密和解密。
要生成壹系列隨機整數,可以使用以下公式:
int((upper bound-lower bound+1)* Rnd+lower bound)
這裏upperbound是隨機數範圍的上限,lowerbound是隨機數範圍的下限。
註意:如果想得到重復的隨機數序列,在使用帶數值參數的Randomize之前,直接用負參數值調用Rnd。使用相同數值的隨機化不會得到重復的隨機數序列。
2、非重復隨機數算法1
這是最簡單的算法。每生成壹個隨機數,就與現有的進行比較,如果已經存在,就重新生成。更適合從大範圍抽取小部分數據,比如從題庫中抽取試題。
【vb】?觀平原?復制?打印?
生成20個介於1和100之間的不重復隨機數。
公共?Sub?RndNumberNoRepeat1()
暗淡?RndNumber,temp(20),I,k,Maxrec?作為?整數
隨機化(定時器)?初始化隨機數生成器。
Maxrec = 100
從A21輸出隨機數。
k = 0
做什麽?什麽時候?k & lt20
Rnd number = Int(Maxrec * Rnd)+1
溫度(k)= rnd編號
單元格(k + 21,1) = RndNumber
為了什麽?i = 0?去哪?k - 1
如果?temp(i) = RndNumber?然後呢?退出?為
下壹個?我
如果?i = k?然後呢?k = i + 1
“MsgBox”隨機數:“&;RndNumber
環
結束?潛水艇
3.非重復隨機數算法2
這個算法很巧妙,需要仔細理解才能知道真正的含義。這個算法不會重復生成隨機數,但是需要壹個占位符數組。它更適合輸出範圍內的所有值,例如,隨機發牌。
【vb】?觀平原?復制?打印?
生成20個介於1和100之間的不重復隨機數。
Sub?RndNumberNoRepeat2()
暗淡?RndNumber,TempArray(99),I?作為?整數
隨機化(定時器)?初始化隨機數生成器。
為了什麽?i = 0?去哪?99?生成壹個不重復的隨機序列,包含1-100。
TempArray(i) = i
下壹個?我
為了什麽?i = 99?去哪?80?壹步?-1
RndNumber = Int(i * Rnd)
從A21輸出這些數字。
單元格(120 - i,1) =臨時數組(RndNumber) + 1
TempArray(rnd number)= TempArray(I)
下壹個?我
結束?潛水艇
4、非重復隨機數算法3
這個算法使用字典對象來完成復制,和第壹個算法差不多,但是程序看起來更簡單,嗯,至少很新穎。
【vb】?觀平原?復制?打印?
生成20個介於1和100之間的不重復隨機數。
Sub?RndNumberNoRepeat3()
暗淡?d?作為?對象?新詞典
暗淡?s?作為?整數
隨機化(定時器)?初始化隨機數生成器。
設置?d = CreateObject("腳本。字典》)
做什麽?直到?d .計數= 20
s = Int(Rnd * 100 + 1)
d(s) =?""
環
[a21]。Resize(d.Count,1) = Application。移調(調)
結束?潛水艇
附:VBA詞典對象使用情況匯總
模糊字典
創建詞典
Set dict = CreateObject("腳本。字典》)
添加項目
迪克特。加上“A”,300
迪克特。加上“B”,400
迪克特。加上“C”,500
清點物品的數量
n =字典。數數
刪除項目
迪克特。移除(“A”)
確定字典是否包含關鍵字。
字典存在(" B ")
取關鍵字對應的值,使用前註意是否有鍵,否則dict中會多壹條記錄。
值=字典。項目(“B”)
修改關鍵字對應的值,如果不存在就新建壹個項目。
迪克特。Item("B") = 1000
迪克特。Item("D") = 800
在字典中循環。
k =字典. keys
v =字典。項目
對於i = 0來說。計數- 1
key = k(i)
值= v(i)
MsgBox密鑰和密碼。價值
然後
刪除所有項目
迪克特。全部刪除
示例:
子宏1()
Set DIC = createobject ("scripting。字典”)'字典
對於i = 1至10000
如果不是,我喜歡“*4*”,然後
Dic。如果不包含“1”,則添加I,“”
如果…就會結束
然後
範圍(“A2”)。調整大小(DIC。計數,1) =應用程序。工作表函數。轉置(DIC。Keys)'從壹個2單元開始,放下。
末端接頭
=========================================================================
給出了使用Tranpose工作表函數的另壹個例子。
將壹行多列的二維數組轉換為壹維數組。
子測試()
昏暗的arr,arrt
arr = Range("a1:j1 ")
arrt =工作表功能。轉置(工作表功能。轉置
停止
末端接頭
首先看轉置函數的基本用法。官方幫助顯示,轉置函數可以返回轉置後的單元格區域,即把行單元格區域轉置為列單元格區域,反之亦然。
TRANSPOSE函數的語法是:TRANSPOSE(array)
Array參數是工作表上需要轉置的數組或單元格區域。所謂數組轉置,就是數組的第壹行是新數組的第壹列,數組的第二行是新數組的第二列,以此類推。