Private Sub Command1_Click()
MsgBox GetRndItem(3)
End Sub
Function GetRndItem(num As Integer) As String
Dim a
a = Split("125 625#235 456#658 125#125 151#152 841#152 151", "#")
Dim i As Integer
Randomize
Dim Index As Integer
Dim Text As String
Dim arU As Integer
arU = UBound(a)
If num > arU + 1 Then num = arU + 1
For i = 1 To num
Index = Int(Rnd * arU)
Text = Text & vbTab & a(Index)
a(Index) = a(arU)
arU = arU - 1
Next
GetRndItem = Mid(Text, 2)
End Function
每次产生一随机数组索引,随机索引范围是从最小下标到最大下标前一位。取出随机位的数组元素
之后,用最后一数组元素替换该位,然后把最后一位用Redim preserve压缩掉。不过压缩不用了,只要用一个变量arU来表示数组中最大有效数下标位就可。
取完随机数之后用for循环与你取得数进行对比,如果相同则重新取一个就好了
希望下面的代码能帮到你:
Private Sub Command1_Click()
Dim a(10) As Integer
Randomize
For i = 0 To 9
a(i) = i
Next i
n = Val(InputBox("要取几个不重复的数:"))
If n > 10 Then Exit Sub
For i = n To 1 Step -1
t = Int(i * Rnd)
Print a(t);
a(t) = a(i)
Next i
Print
End Sub
看看这个吧,我做的是从数据库抽数,你也可以从数组抽数