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