तो मेरे पास 1 से 100 की सीमा से यादृच्छिक रूप से एक संख्या चुनने और सेल में रखने के लिए एक बटन है:

Public Sub RangeValue()
    Dim i As Long
    Static n As Long, s As String
    Const MIN = 1, MAX = 100, OUT = "L10", DEL = "."
    Randomize
    Do
        i = Rnd * (MAX - MIN) + MIN
        If 0 = InStr(s, i & DEL) Then
            n = n + 1: s = s & i & DEL
            Range(OUT) = i
            If n > MAX - MIN Then n = 0: s = ""
            Exit Do
        End If: DoEvents
    Loop
End Sub

मैं चाहता हूं कि अब वह उस सीमा से 2 नंबर चुनें और दो कक्षों में रखें। मैने प्रयत्न किया:

Public Sub RangeValue()
    Dim i As Long
    Static n As Long, s As String
    Const MIN = 1, MAX = 100, OUT = "L10""L11", DEL = "."
    Randomize
    Do
        i = Rnd * (MAX - MIN) + MIN
        If 0 = InStr(s, i & DEL) Then
            n = n + 1: s = s & i & DEL
            Range(OUT) = i
            If n > MAX - MIN Then n = 0: s = ""
            Exit Do
        End If: DoEvents
    Loop
End Sub

लेकिन यह काम नहीं करता है। लक्ष्य 2 नंबरों को चुनना और 2 सेल में डालना है, और उन्हें तब तक नहीं दोहराना है जब तक कि सभी 100 नंबरों का उपयोग नहीं किया जाता है।

0
user8772722 13 अक्टूबर 2017, 20:30

2 जवाब

मैंने आपके कोड को बारीकी से नहीं देखा है, लेकिन इसके लिए आप नीचे दिए गए कोड को भी आजमा सकते हैं जो बनाए रखने में आसान है और समान परिणाम देगा।

    Sub RandomValues()
    With Range("L10:L11")
        .Formula = "=RANDBETWEEN(1,100)"
        .Value = .Value
    End With
    End Sub
0
shrivallabha.redij 13 अक्टूबर 2017, 20:45
यह दोहराएगा। मैं चाहता हूं कि यह किसी संख्या का पुन: उपयोग करने से पहले सभी 100 नंबरों से गुजरे
 – 
user8772722
13 अक्टूबर 2017, 20:57

कैसा रहेगा:

Public arr(1 To 100) As Variant

Sub ButtonCode()
    If arr(1) = "" Then
        For I = 1 To 100
            arr(I) = I
        Next I
        Call Shuffle(arr)
        Range("L10").Value = arr(1)
    Else
        N = Application.WorksheetFunction.Count(Range("L10:L" & Rows.Count))
        Range("L10").Offset(N) = arr(N + 1)
    End If
End Sub

Public Sub Shuffle(InOut() As Variant)
    Dim I As Long, J As Long
    Dim tempF As Double, Temp As Variant

    Hi = UBound(InOut)
    Low = LBound(InOut)
    ReDim Helper(Low To Hi) As Double
    Randomize

    For I = Low To Hi
        Helper(I) = Rnd
    Next I


    J = (Hi - Low + 1) \ 2
    Do While J > 0
        For I = Low To Hi - J
          If Helper(I) > Helper(I + J) Then
            tempF = Helper(I)
            Helper(I) = Helper(I + J)
            Helper(I + J) = tempF
            Temp = InOut(I)
            InOut(I) = InOut(I + J)
            InOut(I + J) = Temp
          End If
        Next I
        For I = Hi - J To Low Step -1
          If Helper(I) > Helper(I + J) Then
            tempF = Helper(I)
            Helper(I) = Helper(I + J)
            Helper(I + J) = tempF
            Temp = InOut(I)
            InOut(I) = InOut(I + J)
            InOut(I + J) = Temp
          End If
        Next I
        J = J \ 2
    Loop
End Sub

यह कोड बिना किसी दोहराव के सेल L10 से शुरू होने वाली सूची में मान जोड़ देगा।

संपादित करें#1:

यह बेहतर होना चाहिए:

Dim arr(1 To 100) As Variant
Dim clicks As Integer

Sub ButtonCode2()
    If arr(1) = "" Then
        For I = 1 To 100
            arr(I) = I
        Next I

        Call Shuffle(arr)

        Range("L10").Value = arr(1)
        Range("L11").Value = arr(2)
        clicks = 3
    Else
        Range("L10").Value = arr(clicks)
        Range("L11").Value = arr(clicks + 1)
        clicks = clicks + 2
    End If
End Sub

(शफल कोड को ऐसे ही रहने दें)

0
Gary's Student 13 अक्टूबर 2017, 21:37
यह मुझे एक त्रुटि दे रहा है: स्थिरांक, निश्चित लंबाई के तार, सरणियाँ, उपयोगकर्ता परिभाषित टायो को सार्वजनिक सदस्यों के रूप में अनुमति नहीं है
 – 
user8772722
13 अक्टूबर 2017, 21:03
अजीब.......क्या होता है यदि आप सार्वजनिक के स्थान पर मंद का उपयोग करते हैं ??
 – 
Gary's Student
13 अक्टूबर 2017, 21:06
उस तरह काम किया। लेकिन मेरा लक्ष्य 1-100 की सीमा से 2 संख्याएं प्राप्त करना और कोशिकाओं L10 और L11 में प्रदर्शित करना है। मुझे संख्याओं की आवश्यकता है कि वे कभी न दोहराएं या समान न हों। मतलब, सभी नंबरों पर जाने के लिए उस बटन के 50 क्लिक लगेंगे
 – 
user8772722
13 अक्टूबर 2017, 21:18
मुझे आशा है कि मैं समझता हूँ...... आप केवल 2 सेल भरना चाहते हैं ......... 1 क्लिक में दोनों सेलों में भर जाना चाहिए............ कोई दोहराव नहीं जब तक कि सभी प्रयोग न हो जाएं...... ? ?
 – 
Gary's Student
13 अक्टूबर 2017, 21:20
सही । मैं चाहता हूं कि सभी 100 नंबर दोहराए जाने से पहले उपयोग किए जाएं
 – 
user8772722
13 अक्टूबर 2017, 21:25