在此循环中,我检查是否使用了以前的任何“随机”数字。但是有时它仍然会生成一个以前使用过的随机数?我不明白为什么,并且希望以我的方式对错误进行指导。
'Generate Random Number and check against previous
Randomize
randomNumberInt = Int((9999 - 1000 + 1) * Rnd + 1000)
randomNumber = randomNumber & CStr(randomNumberInt) 'Convert the Int to a String
For Each Month In Months 'Search all sheets in a loop
With Sheets(Month).Range("I:I") 'Searches all of column I for the randomNumber to check if it has already been used.
Set Rng = .Find(What:=randomNumber, _
After:=.Cells(.Cells.Count), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
If Not Rng Is Nothing Then
'MsgBox "Match Found so restart?!" 'Remove once finished
GoTo RandomNumberGenerator_Restart 'Value found so call the Sub again to try a different number
Else
'Value not found so carry on...
End If
End With
Next Month 'Next sheet/month
Exit Sub
在上一个问题中,我曾问过为什么所谓的“随机”数会重复出现……我没有使用Randomize
来随机化种子数。我赞赏复制的机会现在应该非常有限,但是我仍然想了解循环如何不会阻止重复值再次出现。
编辑:我应该注意,此错误“似乎”是零星的,在某种情况下可以正常运行,在另一种情况下,它会抛出以前使用的“唯一”随机数。...
答案 0 :(得分:4)
我将您的代码读为不是整个函数的内容(例如,GoTo标签不在顶部某处)。将整个内容复制/粘贴到Excel中可能更容易诊断。但是我确实看到了一点好奇。
randomNumber = randomNumber & CStr(randomNumberInt)
似乎将新的4位随机整数与randomNumber
的先前值连接在一起。您可能正在搜索错误的值吗?