Во что бы то ни стало, вот мой ответ на этот вопрос. Этот использует булеву функцию вместо числовых массивов. Это очень просто, но очень быстро. Преимущество этого, которое я не говорю, является идеальным, является эффективным решением для чисел в большом диапазоне, потому что вы всегда проверяете только те числа, которые вы уже выбрали и сохранили, и вам не нужен потенциально большой массив для хранения значений вы отклонили его, поэтому это не вызовет проблем с памятью из-за размера массива.
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