نانسی در تلاش است تا اکسل 50 عدد را انتخاب کند که هر کدام شامل هشت کاراکتر تصادفی است. کاراکترها می توانند ارقام یا حروف (بزرگ یا کوچک) باشند.
اگر اعداد تصادفی شما واقعاً اعداد (فقط رقم) باشند، تولید آنها آسان خواهد بود. تنها کاری که باید انجام دهید این است که از تابع RANDBETWEEN به این صورت استفاده کنید:
=RANDBETWEEN(10000000,99999999)
با این حال، این چیزی نیست که نانسی می خواهد. "اعداد" تصادفی او می تواند شامل حروف بزرگ و کوچک نیز باشد. این کمی چسبنده تر می شود. با این حال، چندین روش وجود دارد که می توانید از آنها استفاده کنید.
یک روش این است که همه کاراکترهای ممکن را در یک سلول جداگانه قرار دهید، مانند B7:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
نام این سلول را چیزی جذاب بگذارید، مانند MySource. سپس می توانید از فرمولی مانند زیر برای برگرداندن رشته تصادفی کاراکترها استفاده کنید:
=MID(MySource,RANDBETWEEN(1,LEN(MySource)),1)
& MID(MySource,RANDBETWEEN(1,LEN(MySource)),1)
& MID(MySource,RANDBETWEEN(1,LEN(MySource)),1)
& MID(MySource,RANDBETWEEN(1,LEN(MySource)),1)
& MID(MySource,RANDBETWEEN(1,LEN(MySource)),1)
& MID(MySource,RANDBETWEEN(1,LEN(MySource)),1)
& MID(MySource,RANDBETWEEN(1,LEN(MySource)),1)
& MID(MySource,RANDBETWEEN(1,LEN(MySource)),1)
فرمول طولانی است. برای وضوح به خطوط جداگانه تقسیم شده است، اما هنوز یک فرمول واحد است. این هشت کاراکتر از منبعی که شما وارد سلول B7 کرده اید به هم متصل می کند.
روش دیگر ایجاد جدولی است که شامل تمام کاراکترهای مورد نظر شما در رشته متن تصادفی شما باشد. با قرار دادن اعداد 1 تا 62 در یک ستون، یک عدد در هر سطر شروع کنید. در سمت چپ این اعداد، کاراکترهای خود را قرار دهید — A، B، C، D و غیره مانند MyTable. سپس می توانید از فرمول زیر برای تولید کاراکترهای تصادفی استفاده کنید:
=VLOOKUP(RANDBETWEEN(1,62),MyTable,2)
& VLOOKUP(RANDBETWEEN(1,62),MyTable,2)
& VLOOKUP(RANDBETWEEN(1,62),MyTable,2)
& VLOOKUP(RANDBETWEEN(1,62),MyTable,2)
& VLOOKUP(RANDBETWEEN(1,62),MyTable,2)
& VLOOKUP(RANDBETWEEN(1,62),MyTable,2)
& VLOOKUP(RANDBETWEEN(1,62),MyTable,2)
& VLOOKUP(RANDBETWEEN(1,62),MyTable,2)
باز هم به یاد داشته باشید که این یک فرمول واحد است، اگرچه کمی کوتاهتر از فرمول قبلی است.
هنوز رویکرد دیگری بر تعریف نام ها با استفاده از Name Manager تکیه دارد. من دقیقاً به نحوه تعریف نام در این نکته نمی پردازم، اما باید از Name Manager برای تعریف نام های a، U، n و x به صورت زیر استفاده کنید:
a =CHAR(RANDBETWEEN(97,122))
U =UPPER(a)
n =CHAR(RANDBETWEEN(48,57))
x =CHOOSE(RANDBETWEEN(1,3),a,U,n)
نام "a" یک حرف کوچک تصادفی، نام "U" یک حرف بزرگ تصادفی و نام "n" یک رقم تصادفی را برمی گرداند. سپس نام "x" یکی از این سه را به طور تصادفی انتخاب می کند. هنگامی که اینها تعریف شدند، می توانید موارد زیر را در هر سلولی قرار دهید:
=x & x & x & x & x & x & x & x
این را می توان به تعداد سلول های دلخواه کپی کرد و در نهایت به رشته تصادفی کاراکترهای خود خواهید رسید.
هر یک از رویکردهای ارائه شده تا کنون یک اشکال دارد: هر بار که کاربرگ شما مجدداً محاسبه می شود، دوباره تولید می شوند. بنابراین، سخت است که یک رشته تصادفی تولید شده داشته باشیم که به طور منظم تغییر نکند. بهترین راه برای حل این مشکل استفاده از ماکرو است، اما لزوما نمی خواهید از یک تابع تعریف شده توسط کاربر استفاده کنید. چرا؟ زیرا آن نیز هر بار که کاربرگ دوباره محاسبه می شد، نتیجه خود را تغییر می داد. در عوض، به یک ماکرو نیاز دارید که رشته های تصادفی را با شروع از یک مکان سلولی خاص در ورک بوک شما قرار دهد. نمونه زیر نمونه ای از این ماکروها است:
Sub MakeRandom()
Dim J As Integer
Dim K As Integer
Dim iTemp As Integer
Dim sNumber As String
Dim bOK As Boolean
Range("D4").Activate
Randomize
For J = 1 To 50
sNumber = ""
For K = 1 To 8
Do
iTemp = Int((122 - 48 + 1) * Rnd + 48)
Select Case iTemp
Case 48 To 57, 65 To 90, 97 To 122
bOK = True
Case Else
bOK = False
End Select
Loop Until bOK
bOK = False
sNumber = sNumber & Chr(iTemp)
Next K
ActiveCell.Value = sNumber
ActiveCell.Offset(1, 0).Select
Next J
End Sub
ماکرو را اجرا کنید، و هر آنچه در سلول های D4:D53 است با مقادیر تصادفی بازنویسی می شود. اگر می خواهید مقادیر در مکان دیگری نوشته شوند، عبارت Range را نزدیک ابتدای ماکرو تغییر دهید.