我的項目是預測非理想的氣體運動,所以我寫了這個代碼給每個分子一個特定的數字,但它保持重複的數字(我用蘭德之間) 我如何改變它,所以它不會重複相同的號碼?VBA中的氣體行爲
子Rand_Number() 「AACO 20àçåæUIîñôøé艾艾÷åìåú
Dim RandNum As Long
Dim k As Long
Dim Mone As Integer
Mone = 0
Num_molecules = Sheets("Data").Range("A14").Value
RandNum = WorksheetFunction.RandBetween(1, Num_molecules)
For j = 1 To Num_molecules * 0.2
If IsEmpty(Sheets("rand").Cells(1, 1)) = True Then
Sheets("rand").Cells(1, 1) = RandNum
Else
i = 1
'RandNum = WorksheetFunction.RandBetween(1, Num_molecules)
Do 'Until IsEmpty(Sheets("rand").Cells(i, 1)) = True
If Sheets("rand").Cells(i, 1) = RandNum Then
RandNum = WorksheetFunction.RandBetween(1, Num_molecules)
Do Until RandNum = Cells(i, 1) Or IsEmpty(Cells(i, 1)) = True
If RandNum = Sheets("rand").Cells(i, 1) Then
RandNum = WorksheetFunction.RandBetween(1, Num_molecules)
Else
i = i + 1
End If
Loop
ElseIf IsEmpty(Sheets("rand").Cells(i, 1)) = False Then
i = i + 1
Else
Sheets("rand").Cells(i, 1) = RandNum
Exit Do
End If
Loop
End If
Next j
末次
萊恩發現 - 這個實現更快,因爲它不會產生從範圍內的所有唯一的號碼,但只有一個它的一部分。我已經更新了我對這個問題的回答,這個問題同時使用了你的方法來除掉dups,並且這樣做直到生成了範圍內的所有數字。它比使用'Remove'更快。我已經將GitHub Gist與所有三者進行了比較,以比較性能。結果在源文件的底部。看一看! :-) –
@LoganReed。也許我誤解了這個問題,但列舉範圍在1-10,000之間的所有隨機數並不是OP所追求的。我認爲需要的是不要重複基於N次模擬的隨機數。如果我們不想重複,爲什麼不做一個For I = 1到10000的循環,或者類似的東西? –
你說得對 - 我可能會推翻它。 OP需要澄清。 –