تولید عدد تصادفی با شرط

Collapse
X
 
  • زمان
  • نمایش
حذف همه
new posts
  • ali.b

    • 2014/01/12
    • 798

    تولید عدد تصادفی با شرط

    سلام دوستان

    میخوام یک عدد تصادفی داشته باشم که از 3 شرط پیروی کنه
    یعنی بر اساس این سه شرط یک عدد تصادفی درست کنه و تکراری هم نباشه چون در شیت یک ایجاد میشه و کل محتویات کپی میشه به شیت بعدی واسه همین نمیخوام اعداد ایجاد شده تکراری باشن و میخوام 16 رقمی باشه

    اینم کدش هست ولی برای گرفتن شرط نمیدونم چکار کنم میشه از این کد کمک گرفت
    ممنونم

    کد:
    Sub uniqecreation()Dim code As Double
    Dim blank As Range, multiple As Range
    If Sheet1.Range("a1") = "" Then
        Set blank = Sheet1.Range("a1")
    Else
        Set blank = Sheet1.Range("a1").Offset(Sheet1.Range("a1").CurrentRegion.Rows.Count, 0)
    End If
    Do
    DoEvents
    code = 10000 + Round(89999 * Rnd)
    On Error Resume Next
    Set multiple = Sheet1.Range(Sheet1.Range("a1"), blank).Find(code, LookIn:=xlValues, LookAt:=xlWhole)
    Loop While IsNull(multiple)
    blank.Value = code
    End Sub
    فایل های پیوست شده
    [CENTER]
    [/CENTER]
  • abootorab

    • 2014/10/17
    • 351

    #2
    نوشته اصلی توسط espartan
    سلام دوستان

    میخوام یک عدد تصادفی داشته باشم که از 3 شرط پیروی کنه
    یعنی بر اساس این سه شرط یک عدد تصادفی درست کنه و تکراری هم نباشه چون در شیت یک ایجاد میشه و کل محتویات کپی میشه به شیت بعدی واسه همین نمیخوام اعداد ایجاد شده تکراری باشن و میخوام 16 رقمی باشه

    اینم کدش هست ولی برای گرفتن شرط نمیدونم چکار کنم میشه از این کد کمک گرفت
    ممنونم

    کد:
    Sub uniqecreation()Dim code As Double
    Dim blank As Range, multiple As Range
    If Sheet1.Range("a1") = "" Then
        Set blank = Sheet1.Range("a1")
    Else
        Set blank = Sheet1.Range("a1").Offset(Sheet1.Range("a1").CurrentRegion.Rows.Count, 0)
    End If
    Do
    DoEvents
    code = 10000 + Round(89999 * Rnd)
    On Error Resume Next
    Set multiple = Sheet1.Range(Sheet1.Range("a1"), blank).Find(code, LookIn:=xlValues, LookAt:=xlWhole)
    Loop While IsNull(multiple)
    blank.Value = code
    End Sub
    با درود
    فایلتون زیاد مفهوم نبود و من درست متوجه منظورتون نشدم اما بر اساس نوشته هاتون این تابع رو واستون میذارم شاید به دردتون خورد.
    کار این تابع تولید اعداد تصادفی غیر تکراری در یک محدوده عددی و به هر تعداد که میخواین هست، شما میتونید با استفاده از دستورات Loop بعد از تولید اعدا شرایطی که گفتین اعمال کنید و اگر بر قرار بود عدد شما استخراج بشه.
    نکته: خروجی این تابع از نوع آرایه است یعنی تمام اعداد تولید شده درون همون متغیر UniuqeRandom قرار میگیره که شما با دادن اندیس از 1 الی تعداد اعدادی که خواستین تولید بشه، تک تک مقادیر رو داشته باشین.
    کد PHP:
    Function UniuqeRandom(Mn As LongMx As LongSample As Long) As Long()
        
    Dim dat() As Long
        Dim i 
    As LongAs Long
        Dim tmp 
    As Long
        
    If Mn Mx Or Sample > (Mx Mn 1Then Exit Function
        
    ReDim dat(1 To Mx Mn 1)
        For 
    1 To UBound(dat)
            
    dat(i) = Mn 1
        Next
        
    For 1 To UBound(dat)
            
    tmp dat(i)
            
    Randomize
            j 
    Int((Mx Mn) * Rnd) + 1
            dat
    (i) = dat(j)
            
    dat(j) = tmp
        Next
        ReDim Preserve dat
    (1 To Sample)
        
    UniuqeRandom dat
    End 
    Function 
    به عنوان مثال:
    کد PHP:
    UniuqeRandom (200,500,3
    یعنی تولید 3 عدد تصادفی غیر تکراری در محدوده 200 الی 500
    توجه: در این تابع UniuqeRandom یک آرایه ستونی می باشد.

    کامنت

    چند لحظه..