原理:利用一個臨時數組保存好隨機范圍的數據(簡稱范圍數據)索引或標識,用rnd隨機生成臨時數組的索引。驗證臨時數組索引所對應的數據,為空則視被記錄過了,將隨機數加一后重復驗證操作直到臨時數組索引對應的數據不為空,則由一個記錄變量記錄下對應的范圍數據標識,并清空此項數據。然后進行下一個隨機操作。
偽函數:
'#### '## 函數參數 '## 范圍數據數組:一維數組。 '## 隨機選擇的數據量:整數。 function MyRnd(范圍數據數組,隨機選擇的數據量) '################################################################ dim 范圍數據數組維數 dim 循環標識 dim 隨機索引 dim 隨機結果 范圍數據數組維數=ubound(范圍數據數組) 循環標識=true if 范圍數據數組維數>隨機選擇的數據量 then '如果 隨機選擇的數據量 大于 范圍數據數組維數 的話就不用隨機讀取了,全布都列出來就是了 Randomize Timer 隨機索引=fix(rnd*(范圍數據數組維數+1)) while 循環標識 if 范圍數據數組(隨機索引 mod 范圍數據數組)<>"" then '數據不為空,則表示未隨機選取過。 隨機索引=范圍數據數組(隨機索引 mod 范圍數據數組) if 隨機結果="" then '隨機結果 以","分隔每個隨機值。 隨機結果=隨機結果 &; "," end if 隨機結果=隨機結果 &; 范圍數據數組(隨機索引) 范圍數據數組(隨機索引)=""'清空該數據表示已隨機過。 循環標識=false'結束循環。 end if if 隨機索引>范圍數據數組維數*3 then '如果 隨機索引 大于 范圍數據數組維數的三倍,表示已經在 范圍數據數組維數 內歷遍過三次,跳出,防止死循環。 循環標識=false end if wend end if end function
應用: 用在隨機選取不重復的數據表記錄。 用getrows將數據表內ID標識換成一個二維數組,然后使用該函數隨機選取指定數量的ID編號以","分隔,然后用in條件式將符合隨機出來的ID編號的數據讀出來即可。 隨機選取不重復的數據。 將所有數據放到一個一維數據,然后用該函數挑隨機挑選即可。
|