Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Генерация случайных чисел без повторов, Необходимо сгенерировать некое количество чисел n раз в строку
 
Есть выборка от 1 до 62.
Нужно из этой выборки записать в строку случайным образом, без повторений, некое количество n значений.
Количество строк и количество значений n нужно задавать через InputBox.
Изменено: kolevchuk - 28 Мар 2018 11:52:29
 
Поиск отказал?!
- https://www.planetaexcel.ru/techniques/14/230/
- https://www.excel-vba.ru/forum/index.php?topic=3990.new&topicseen
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Как записать данные не в столбец, а в строку?
Скрытый текст
Изменено: kolevchuk - 28 Мар 2018 12:26:39
 
Цитата
kolevchuk написал:
Как записать данные не в столбец, а в строку?
Код
Sub random()
    Const n As Long = 62 'случайные числа от 1 до n
    Const m As Long = 10 'кол-во случайных чисел - m
    Dim i As Long, j As Long, a() As Long
    ReDim a(1 To n) As Long
    Randomize
    For i = 1 To n
        j = Int(Rnd() * i + 1)
        If j <> i Then a(i) = a(j)
        a(j) = i
    Next i
    Cells(1, 1).Resize(, m) = a
End Sub
 
MCH, спасибо.
 
MCH, а как повторять это для нескольких строк, это надо для Cells цикл прописывать?
Изменено: kolevchuk - 28 Мар 2018 13:11:57
 
Цитата
kolevchuk написал:
а как повторять это для нескольких строк,
Не понял вопроса, подробнее опишите
 
MCH, заполнили первую строку 10-ю рандомными значениями, переходим ко второй и заполняем её 10-ю новыми рандомными значениями и так далее.
Изменено: kolevchuk - 28 Мар 2018 14:49:00
 
Поправьте или подскажите, если что-то не так.

Код
Sub random()
[a1:o1000000].Clear
    n = Val(InputBox("Верхний предел выборки"))
    m = Val(InputBox("Количество генерируемых чисел"))
    Dim i As Long, j As Long, a() As Long, b As Long
    ReDim a(1 To n) As Long
    Randomize
    For b = 1 To 1000000
    For i = 1 To n
              j = Int(Rnd() * i + 1)
        If j <> i Then a(i) = a(j)
        a(j) = i
    Next i
        Cells(b, 1).Resize(, m) = a
    Next b
End Sub
Изменено: kolevchuk - 28 Мар 2018 19:17:15
Страницы: 1
Читают тему (гостей: 1)
Наверх