我想用一个前缀生成一个唯一的ID。为此,我生成一个介于0000和9999之间的随机数字,并将其添加到我的前缀末尾。然后,我想要做的是检查A列中的工作表,看看该ID是否已经存在,如果是,那么它只是产生另一个随机数,并继续进行,直到找到唯一的一个。为此,我正在使用while循环。以下是我的代码。我遇到的问题是,一旦match()函数找不到任何值,该值将保留为最后一个值,即:找到最后一个值的行号。例如,如果我的ID是T26-7055,它会搜索工作表并发现它已经存在于第59行中。然后它会生成另一个ID,这个时间称为T26 -2099,它不存在,但匹配函数仍然返回59,循环进入无限循环。我不明白为什么会发生这种情况,并希望你们中的一个人能够提供帮助。Application.worksheetFunction.match无法正常工作VBA Excel
Dim newID As String
Dim x As Integer
Dim matchedRow As Boolean
matchedRow = True
x = CInt(Int(9999 * Rnd()) + 1)
newID = "T26 - " & x
While matchedRow = True
Dim match As Long
On Error Resume Next
match = Application.WorksheetFunction.match(newID, Sheets("Exceptions").Columns(1), 0)
On Error GoTo 0
If match <> 0 Then
x = CInt(Int(9999 * Rnd()) + 1)
newID = "T26 - " & x
matchedRow = True
Else
matchedRow = False
End If
Wend
感谢
将Dim match与其他Dim语句一起移动。在每个循环的开始处将匹配重置为0,所以就在'While'行之后加上'match = 0'。 我相信有一个创建唯一ID的更好方法。 –
此链接可能有所帮助:http://www.mrexcel.com/forum/excel-questions/647784-excel-2010-generate-6-digit-unique-random-number-id-column.html –