2016-05-28 4 views
0

乱数ジェネレータから取得する配列を作成します。左の列の値が1(1は再生を意味し、0は再生しないことを意味する)の場合、配列はシート上にあり、列の値が含まれます。演奏を示す10の数字でテストするとすべてが機能しているように見えますが、数字が1-1500になると数字の配列に0が含まれていることを除いて再生していないことを示す1000+の数字があります。ここ コードは:VB6でExcelのランダム値ジェネレータのVBAスクリプトに配列に含まれていない値が含まれています

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

[Re]Dim array(N) ...、N + 1要素、0、1で配列を定義する、N.
ReDim Preserve RandArray(UBound(RandArray) + 1)正しく成長、この事実を活用します1つの要素で配列します。

ReDim Preserve RandArray(UBound(RandArray))は、しかし、間違っています:N +1がRandArrayの要素の数も聞かせて、その後、UBound(RandArray)N、最後の有効な指標です。 ReDim Preserve RandArray(UBound(RandArray))ReDim Preserve RandArray(N)に相当し、まだN + 1個の要素を持っています。スプリアス最後のヌル要素を取り除くために

、何Option Base 1を想定していないReDim Preserve RandArray(UBound(RandArray)-1)


と配列を縮小。

+0

ありがとうございました!これは上記の答えと組み合わせて働いた! – erikasoladams

0

あなたがRandArrayのランダムな要素が必要な場合:

Range("A27").Value = RandArray(WorksheetFunction.RandBetween(LBound(RandArray), UBound(RandArray))) 

(あなたのコードは、単にランダムなインデックスを取得します)
私も使用します。

For Each cell In Intersect(Worksheets("Registration").Range("B:B").Cells,Worksheets("Registration").UsedRange) 

を物事をスピードアップするには。

+0

ありがとう!これは以下の答えと組み合わせて働いた – erikasoladams

+0

@erikasoladamsフィードバックいただきありがとうございます! .............ランダムな選択肢を作るという話題は私の興味です。 –

関連する問題