2014-03-31 30 views
1

这个随机数发生器工作得很好,但随机序列不是Unique使随机数发生器创建独特的序列

我需要的所有序列是unique有人可以看到如何做到这一点

感谢

Sub RanSerialGenerator() 
Dim rng As Range 
Dim LastRow As Long 

With Sheets(') 
    LastRow = .Range("C" & .Rows.Count).End(xlUp).Row 
End With 

Range("A1").FormulaR1C1 = "Header Name" 
Range("A2", Range("A2").End(xlDown)).Clear 

    For Each rng In Sheets(1).Range("E2:E" & LastRow) 

    rng.Value = Pwd(rng.Value) 
Next 

End Sub 


Function Pwd(ByVal strTemp As String) As String 

Dim i As Integer, iTemp As Integer, bOK As Boolean, iLength As Integer 

'48-57 = 0 To 9, 65-90 = A To Z, 97-122 = a To z 
'amend For other characters If required 

'Set the # of characters 
For i = 1 To 3 
    Do 
    ' Initialize the seed using Timer. 
    Randomize (Timer) 

     iTemp = Int((122 - 48 + 1) * Rnd + 48) 
     Select Case iTemp 
     Case 65 To 90, 97 To 122: bOK = True 
     Case Else: bOK = False 
     End Select 
    Loop Until bOK = True 
    bOK = False 
    strTemp = strTemp & Chr(iTemp) 

Next i 
Pwd = strTemp 
End Function 
+1

在你的列表中使用Find()来检查你刚刚得到的值:如果你找到它,那么再次调用Pwd()。 –

+0

谢谢蒂姆,我会尝试这个 – xyz

回答

1

试试这个:

Sub RanSerialGenerator() 
    Dim rng As Range 
    Dim LastRow As Long 
    Dim p As String 
    With Sheets("Sheet1") 
     LastRow = .Range("C" & .Rows.Count).End(xlUp).Row 
    End With 

    Range("A1").FormulaR1C1 = "Header Name" 
    Range("A2:A" & Rows.Count).Clear 

    For Each rng In Sheets(1).Range("E2:E" & LastRow) 
     Do 
      p = Pwd(rng.Value) 
     Loop Until IsError(Application.Match(p, Sheets(1).Range("E1:E" & rng.Row), 0)) 
     rng.Value = p 
    Next 

End Sub 

Al所以Range("A1")属于哪个表格还不清楚,以便激活?也许最好明确使用表格:Sheets("Sheet1").Range("A1")...

+1

simoco,工作得很好,谢谢 – xyz