1樓:司馬鑄劍
vba程式設計實現不重複隨機數輸出。vba裡的隨機函式是rnd,在工作表中隨機函式是rand,一字e68a8462616964757a686964616f31333363393566之差,可要記好了。rnd取值範圍是[0,1),意思是0和1之間的一個隨機數,包含0,但不包含1。
1、用法
語法:rnd[(number)]
如果 number 的值是 randomize 生成
小於 0 ,每次都使用 number 作為隨機數種子得到的相同結果。
大於 0 ,以上一個隨機數為種子產生下一個隨機數。
等於 0 ,產生與最近生成的隨機數相同的隨機數。
省略, 以上一個隨機數為種子產生下一個隨機數(同大於0)。
說明:rnd 函式返回小於 1 但大於或等於 0 的值。
number 的值決定了 rnd 生成隨機數的方式。
對最初給定的種子都會生成相同的數列,因為每一次呼叫 rnd 函式都用數列中的前一個數作為下一個數的種子。
在呼叫 rnd 之前,先使用無引數的 randomize 語句初始化隨機數生成器(若帶引數,則產生由引數對應的一個特定序列的隨機數),該生成器具有根據系統計時器得到的種子。如果不使用randomize 語句,那麼每次執行程式時產生的隨機數序列是相同的。
rnd 後面跟一個負數時,同樣的引數可以得到完全相同的兩個序列,例如,rnd -1執行後用rnd取1000個隨機數,然後再執行rnd -1,然後再用rnd取1000個隨機數,這1000個隨機數和前面1000個完全相同。為了得到不同的序列,可以用不同的負數,也可以在rnd -1後面執行randomize number。注意,要得到相同的序列,兩次randomize後面的number必須相同。
這種方法用途之一就是用於加密和解密。
為了生成某個範圍內的隨機整數,可使用以下公式:
int((upperbound - lowerbound + 1) * rnd + lowerbound)
這裡,upperbound 是隨機數範圍的上限,而 lowerbound 則是隨機數範圍的下限。
注意:若想得到重複的隨機數序列,在使用具有數值引數的 randomize 之前直接呼叫具有負引數值的 rnd。使用具有同樣 number 值的 randomize 是不會得到重複的隨機數序列的。
2、無重複隨機數演算法一
這是最簡單的演算法,每產生一個隨機數,就和已有的比較,如果已經存在,則重新產生。比較適合從一個大範圍裡面抽出一小部分資料,比如,從題庫中抽取試題。
[vb] view plain copy print?
' 產生20個1-100之間的不重複隨機數
public sub rndnumbernorepeat1()
dim rndnumber, temp(20), i, k, maxrec as integer
randomize (timer) '初始化隨機數生成器
maxrec = 100
' 從a21開始輸出隨機數
k = 0
do while k < 20
rndnumber = int(maxrec * rnd) + 1
temp(k) = rndnumber
cells(k + 21, 1) = rndnumber
for i = 0 to k - 1
if temp(i) = rndnumber then exit for
next i
if i = k then k = i + 1
'msgbox "隨機數:" & rndnumber
loop
end sub
3、無重複隨機數演算法二
這個演算法比較巧妙,需要細細體會,才能知道真諦。這個演算法不會重複產生隨機數,但需要一個佔位陣列。比較適合輸出範圍之內所有數值的場合,比如,隨機發牌。
[vb] view plain copy print?
' 產生20個1-100之間的不重複隨機數
sub rndnumbernorepeat2()
dim rndnumber, temparray(99), i as integer
randomize (timer) '初始化隨機數生成器
for i = 0 to 99 '產生包含1-100的不重複的隨機數列
temparray(i) = i
next i
for i = 99 to 80 step -1
rndnumber = int(i * rnd)
'從a21開始輸出這些數字
cells(120 - i, 1) = temparray(rndnumber) + 1
temparray(rndnumber) = temparray(i)
next i
end sub
4、無重複隨機數演算法三
這個演算法使用字典物件完成去重複,和第一個演算法差不多,但程式看上去簡潔一點,嗯,起碼新穎一點。
[vb] view plain copy print?
' 產生20個1-100之間的不重複隨機數
sub rndnumbernorepeat3()
dim d as object 'new dictionary
dim s as integer
randomize (timer) '初始化隨機數生成器
set d = createobject("scripting.dictionary")
do until d.count = 20
s = int(rnd * 100 + 1)
d(s) = ""
loop
end sub
附:vba中dictionary物件使用小結
dim dict
' 建立dictionary
set dict = createobject("scripting.dictionary")
' 增加專案
dict.add "a", 300
dict.add "b", 400
dict.add "c", 500
' 統計專案數
n = dict.count
' 刪除專案
dict.remove ("a")
' 判斷字典中是否包含關鍵字
dict.exists ("b")
' 取關鍵字對應的值,注意在使用前需要判斷是否存在key,否則dict中會多出一條記錄
value = dict.item("b")
' 修改關鍵字對應的值,如不存在則建立新的專案
dict.item("b") = 1000
dict.item("d") = 800
' 對字典進行迴圈
k = dict.keys
v = dict.items
for i = 0 to dict.count - 1
key = k(i)
value = v(i)
msgbox key & value
next
' 刪除所有專案
dict.removeall
例項:sub 巨集1()
set dic = createobject("scripting.dictionary") '字典
for i = 1 to 10000
if not i like "*4*" then
dic.add i, "" '如果不包含「1」
end if
next
end sub
又 tranpose工作表函式的用法例項
'把一行多列的二維陣列轉換成一維陣列
sub test()
dim arr, arrt
arr = range("a1:j1")
arrt = worksheetfunction.transpose(worksheetfunction.transpose(arr))
stop
end sub
首先看看transpose函式的基礎用法。官方幫助說明,transpose函式可返回轉置單元格區域,即將行單元格區域轉置成列單元格區域,反之亦然。
transpose函式語法是:transpose(array)
array引數是需要進行轉置的陣列或工作表上的單元格區域。所謂陣列的轉置就是,將陣列的第一行作為新陣列的第一列,陣列的第二行作為新陣列的第二列,以此類推
2樓:匿名使用者
dim b as integer
dim d as integer
b = rnd() * 900 + 100d=strreverse(b)
在vb中,如何編寫程式通過隨機函式產生10~99之間的隨機整數?
3樓:匿名使用者
vb 產生隨機數的公式(上界-下界+1)*rnd+下界你的題目就應該是(99-10+1)*rnd +10一般用rnd的時候還要在前面加一條 randomize 初始化隨機種 子
4樓:匿名使用者
randomize time '初始化
print int(rnd * 90) + 10 '產生隨機數,並輸出
5樓:匿名使用者
private sub form_click()randomize
for i = 10 to 99
n = int(rnd * i + 10)next
print nend sub
6樓:匿名使用者
dim tmp as byte randomize timer ' 隨機種子 tmp=int(rnd * 90+10) msgbox tmp ' 輸出隨機數
設計程式vb隨機產生10到100之間(包括10和
private sub command1 click on error resume next dim a 5 as integer randomize int upperbound lowerbound 1 rnd lowerbound for i 0 to 3 b c 0 for j 1 to ...
C語言一維陣列程式設計隨機產生100200之間的隨機整
include include include define n 10 int main void for i 0 i 一 建立一個10個元素的int陣列,1 隨機賦值 100以內的整數 2 按降序排序 3 輸出排序後的陣列元素 30 include include include int main...
用vc語言程式設計實現,用VC語言程式設計實現216進位制內任意進位制之間的轉換。謝謝大神。
include include include int readnumber char input,int base if base 2 base 16 int number 0 for int i 0 i inputlength i else if c a c f else if c a c f ...