當前位置:編程學習大全網 - 編程語言 - Vvb編程示例

Vvb編程示例

VBA編程實現不重復隨機數輸出。VBA中的隨機函數是RND,工作表中的隨機函數是蘭德。記住區別這個詞。RND的範圍是[0,1],表示0到1之間的隨機數,包括0,但不包括1。

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參數是工作表上需要轉置的數組或單元格區域。所謂數組轉置,就是數組的第壹行是新數組的第壹列,數組的第二行是新數組的第二列,以此類推。

  • 上一篇:計算機考研:數據結構常用算法解析(8)?
  • 下一篇:哪些app可以自學編程
  • copyright 2024編程學習大全網