我创建了一个随机数生成器应该从中拉出的数组。数组在工作表上,如果左侧的列的值为1(1表示正在播放,0表示不播放),则包含列中的值。当我测试10个数字表示播放时,一切似乎都在工作,1000个数字表示没有播放,当数字从1-1500开始时,数字数组中包含0。 这是代码:
Sub RandArray()
Dim RandArray As Variant, cell As Range
ReDim RandArray(0)
For Each cell In Worksheets("Registration").Range("B:B").Cells
If cell.Value = "1" Then
RandArray(UBound(RandArray)) = cell.Offset(0, 1).Value
ReDim Preserve RandArray(UBound(RandArray) + 1)
End If
Next cell
ReDim Preserve RandArray(UBound(RandArray))
Range("A27").Value = WorksheetFunction.RandBetween(LBound(RandArray), UBound(RandArray))
End Sub
答案 0 :(得分:0)
在VB6中[Re]Dim array(N)
定义一个数组,其中 N + 1 元素 1 ,0,1,...,N。
ReDim Preserve RandArray(UBound(RandArray) + 1)
正确地利用了这个事实,将数组增加了一个元素。
ReDim Preserve RandArray(UBound(RandArray))
但是不正确:让 N +1为RandArray
的元素数量,然后UBound(RandArray)
N ,最后一个有效索引;因此ReDim Preserve RandArray(UBound(RandArray))
相当于ReDim Preserve RandArray(N)
,但仍有 N + 1个元素。
要摆脱虚假的最后一个null元素,请使用ReDim Preserve RandArray(UBound(RandArray)-1)
1 假设没有Option Base 1
。
答案 1 :(得分:0)
如果你想要RandArray的随机元素:
RequestHandler
(您的代码只是获得一个随机索引)
我也会用:
Range("A27").Value = RandArray(WorksheetFunction.RandBetween(LBound(RandArray), UBound(RandArray)))
加快速度。