여기에 가치가있는 것은 무엇이든이 질문에 대한 나의 찔림입니다. 이 함수는 숫자 배열 대신 부울 함수를 사용합니다. 그것은 매우 간단하지만 매우 빠릅니다. 내가 말한 것이 아니라는 장점은 장거리 범위의 숫자를 효과적으로 처리하는 솔루션입니다. 이미 선택한 번호를 확인하고 값을 저장하기 위해 잠재적으로 큰 배열이 필요하지 않기 때문입니다. 거부 했으므로 배열의 크기 때문에 메모리 문제가 발생하지 않습니다.
Sub UniqueRandomGenerator()
Dim N As Long, MaxNum As Long, MinNum As Long, Rand As Long, i As Long
MinNum = 1 'Put the input of minimum number here
MaxNum = 100 'Put the input of maximum number here
N = MaxNum - MinNum + 1
ReDim Unique(1 To N, 1 To 1)
For i = 1 To N
Randomize 'I put this inside the loop to make sure of generating "good" random numbers
Do
Rand = Int(MinNum + N * Rnd)
If IsUnique(Rand, Unique) Then Unique(i, 1) = Rand: Exit Do
Loop
Next
Sheet1.[A1].Resize(N) = Unique
End Sub
Function IsUnique(Num As Long, Data As Variant) As Boolean
Dim iFind As Long
On Error GoTo Unique
iFind = Application.WorksheetFunction.Match(Num, Data, 0)
If iFind > 0 Then IsUnique = False: Exit Function
Unique:
IsUnique = True
End Function
동일한 질문이 두 번 나오지 않도록하려는 생각이 들었습니다. – Reafidy