Member 13462005 Ответов: 2

Случайное число VBA справка


У меня проблемы. Я придумал, как случайным образом выбрать число из диапазона от 1 до 100, чтобы никогда не повторяться, и отобразить его в ячейке с помощью кнопки.

Я хочу, чтобы код дал мне 2 числа и отображался в 2 соседних ячейках. никогда не повторять. Таким образом, теперь потребуется 50 щелчков кнопки, чтобы пройти через цифры.

Что я уже пробовал:

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

Maciej Los

Что не так с вашим кодом?

2 Ответов

Рейтинг:
0

Patrice T

Цитата:
Случайное число VBA справка

Чем помочь?
Цитата:
У меня проблемы.

Это не информативно, что за беда? в чем вопрос?

Насколько я понимаю ваш код, я вижу 2 проблемы:
- Однажды ты выбрал один из них. 12, 22, 32, 42, 52 ..., это помешает вам выбрать 2, потому что любой из них будет соответствовать противнику 2.
- ваш алгоритм понижается по мере увеличения числа выбранных чисел.
Перетасовка-это путь: Перетасовка-Википедия[^]


Рейтинг:
0

Maciej Los

Попробовать это:

Option Explicit

Sub Test()

    GenerateRandomNumers 50, 1, 100
End Sub

'procedure to generate random numbers
Sub GenerateRandomNumers(ByVal iCount As Integer, ByVal iMin As Integer, ByVal iMax As Integer)
    Dim iNumber As Integer, iCounter As Integer, iCol As Integer
    Dim wsh As Worksheet
    
    Set wsh = ThisWorkbook.Worksheets(1)
    iCol = 0
    iNumber = 0
    Do While iCol < 2
        Do While iCounter < iCount
            'Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
            iNumber = Int((iMax - iMin + 1) * Rnd + iMin)
            wsh.Range("L" & iCounter + 10).Offset(ColumnOffset:=iCol) = iNumber
            iCounter = iCounter + 1
        Loop
        iCounter = 0
        iCol = iCol + 1
    Loop
    Set wsh = Nothing

End Sub