Excel VBA循环检查重复项不起作用...有时

时间:2019-07-28 18:40:03

标签: excel vba

在此循环中,我检查是否使用了以前的任何“随机”数字。但是有时它仍然会生成一个以前使用过的随机数?我不明白为什么,并且希望以我的方式对错误进行指导。

'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来随机化种子数。我赞赏复制的机会现在应该非常有限,但是我仍然想了解循环如何不会阻止重复值再次出现。

编辑:我应该注意,此错误“似乎”是零星的,在某种情况下可以正常运行,在另一种情况下,它会抛出以前使用的“唯一”随机数。...

1 个答案:

答案 0 :(得分:4)

我将您的代码读为不是整个函数的内容(例如,GoTo标签不在顶部某处)。将整个内容复制/粘贴到Excel中可能更容易诊断。但是我确实看到了一点好奇。

randomNumber = randomNumber & CStr(randomNumberInt)似乎将新的4位随机整数与randomNumber的先前值连接在一起。您可能正在搜索错误的值吗?