اکسل در تولید اعداد تصادفی عالی است، اما در پر کردن محدوده ای از سلول ها با اعداد تصادفی که در آن هیچ عدد خاصی دو بار تکرار نمی شود، عالی است. به عنوان مثال، ممکن است بخواهید 52 سلول را با اعداد 1 تا 52 به ترتیب تصادفی پر کنید. (این بسیار شبیه به انتخاب کارت ها از یک عرشه به ترتیب تصادفی است، جایی که یک کارت خاص فقط یک بار قابل انتخاب است. بنابراین، عنوان این نکته است.)
بدیهی است که هیچ تابع اکسل داخلی برای ارائه این قابلیت وجود ندارد، بنابراین شما باید با ماکروها کار کنید. خوشبختانه، ایجاد چنین ماکرو خیلی سختی نیست. ماکرو زیر به خوبی این کار را انجام می دهد:
Sub FillRand()
Dim nums() As Integer
Dim maxval As Integer
Dim nrows As Integer, ncols As Integer
Dim j As Integer, k As Integer
Dim Ptr As Integer
Randomize
Set s = Selection
maxval = s.Cells.Count
nrows = s.Rows.Count
ncols = s.Columns.Count
ReDim nums(maxval, 2)
Fill the initial array
For j = 1 To maxval
nums(j, 1) = j
nums(j, 2) = Int((Rnd * maxval) + 1)
Next j
Sort the array based on the random numbers
For j = 1 To maxval - 1
Ptr = j
For k = j + 1 To maxval
If nums(Ptr, 2) > nums(k, 2) Then Ptr = k
Next k
If Ptr <> j Then
k = nums(Ptr, 1)
nums(Ptr, 1) = nums(j, 1)
nums(j, 1) = k
k = nums(Ptr, 2)
nums(Ptr, 2) = nums(j, 2)
nums(j, 2) = k
End If
Next j
Fill in the cells
Ptr = 0
For j = 1 To nrows
For k = 1 To ncols
Ptr = Ptr + 1
s.Cells(j, k) = nums(Ptr, 1)
Next k
Next j
End Sub
این ماکرو از یک آرایه دو بعدی (nums) استفاده می کند تا بفهمد از کدام اعداد و ترتیب استفاده از آنها استفاده می شود. نزدیک به ابتدای ماکرو، آرایه با یک عدد ثابت (1 از طریق تعداد سلول ها) و یک عدد تصادفی بین 1 و تعداد سلول ها پر می شود. سپس از این عدد دوم برای مرتب سازی آرایه استفاده می شود. هنگامی که آرایه ذخیره می شود، قرار دادن اعداد اصلی در سلول ها کار ساده ای است.
به هر حال، دلیل استفاده از آرایه دو بعدی این است که تابع Rnd که VBA برای تولید اعداد تصادفی استفاده می کند، می تواند مقادیر تکراری را برگرداند. بنابراین، حتی اگر بعد دوم آرایه می تواند موارد تکراری در خود داشته باشد، وقتی آرایه در نهایت مرتب شد، بعد اول تکراری نخواهد داشت.
برای استفاده از ماکرو، با انتخاب سلول هایی که می خواهید با مقادیر متوالی به ترتیب تصادفی پر شوند، شروع کنید. وقتی ماکرو را اجرا می کنید، آن محدوده پر می شود. به عنوان مثال، اگر ده سلول را انتخاب کنید و سپس ماکرو را اجرا کنید، آن سلول ها با اعداد 1 تا 10 به ترتیب تصادفی پر می شوند.