المشاركة الأصلية كتبت بواسطة: YasserKhalil بارك الله فيك أخي الحبيب سليم وجزاك الله خيراً
لإثراء الموضوع هذا كود يقوم بذلك
CODE
Sub Test_RandomNumbers()
Dim r As Range
Dim a As Long
Dim b As Long
a = 5: b = 17
Set r = Sheets(1).Range("A1:A20")
RandomNumbers a, b, r
End Sub
Sub RandomNumbers(low As Long, high As Long, rng As Range)
Dim cell As Range
Dim rndNumber As Long
rng.ClearContents
For Each cell In rng.Cells
If WorksheetFunction.CountA(rng) = (high - low + 1) Then Exit For
Do
rndNumber = Int((high - low + 1) * Rnd() + low)
Loop Until rng.Cells.Find(rndNumber, LookIn:=xlValues, lookat:=xlWhole) Is Nothing
cell.Value = rndNumber
Next cell
End Sub
حبيب القلب ياسر
تريدها بالكود فليكن
الكود سريع جداً جداً ( يمكن اختباره بواسطة الخلية F3) في 0.8 ثانية 10000 رقم غير مكرر
CODE
Option Explicit
Sub rand_num()
Dim i%
Dim myStart%: myStart = Application.Min([c1], [d1])
Dim myEnd%: myEnd = Application.Max([c1], [d1])
Dim a()
Dim t: t = Timer
Range("b:b").ClearContents
ReDim a(myEnd - myStart)
With CreateObject("System.Collections.SortedList")
For i = myStart To myEnd
.Item(Rnd) = i
Next i
For i = 0 To .Count - 1
a(i) = .GetByIndex(i)
Next
End With
Range("b2").Resize(UBound(a) + 1).Value = Application.Transpose(a)
Erase a
Range("F3") = Round(Timer - t, 3) & " Secondes"
End Sub
الملف مرفق