Страницы: 1
RSS
Randomize (RDN) зацикливается после 3-го раза
 
Добрый день всем.


Задача состояла в том, чтобы в 3 столбца и 7 строк забить цифры от 1 до 7 случайным образом, с условием, что:
1. В строке не было повторяющихся чисел
2. Чтобы в разных строках не было по 2х одинаковым чисел

По сути, это рандомная жеребьевка 7ми команд при игре в круг (каждый с каждым) в день играет по 3 команды
756
514
246
613
127
523
347
Сразу предупрежу, что реализация "топорная", но все же работает. После запуска таблица выстраивается, но после 3-го запуска (именно 3-го) уходит в зацикл.
Подскажите в чем дело или что поправить
Код
Sub AxeRND()
Dim arr()
Range(Cells(1, 1), Cells(20, 3)).ClearContents
        For i = 1 To 3
Return1:
        rDig = Int(Rnd * 7 + 1)
            Cells(1, i) = rDig
                If Cells(1, 1) <> "" And Cells(1, 2) <> "" And Cells(1, 3) <> "" Then
                    If Cells(1, 1) = Cells(1, 2) Or Cells(1, 1) = Cells(1, 3) Or Cells(1, 2) = Cells(1, 3) Then
                        GoTo Return1
                    End If
                End If
        Next
    For j = 2 To 7
        'Randomize
Return2:
        For i = 1 To 3
        rDig = Int(Rnd * 7 + 1)

    LR = Cells(Rows.Count, 1).End(xlUp).Row
Erase arr
    arr = Range(Cells(1, 1), Cells(LR + 1, 3))
            Cells(j, i) = rDig
                If rDig = arr(j, 1) Or rDig = arr(j, 2) Or rDig = arr(j, 3) Then
                    GoTo Return2
                End If
        Next i
            For x = 1 To j - 1
                If ((Cells(j, 1) = arr(x, 1) Or Cells(j, 1) = arr(x, 2) Or Cells(j, 1) = arr(x, 3)) And (Cells(j, 2) = arr(x, 1) Or Cells(j, 2) = arr(x, 2) Or Cells(j, 2) = arr(x, 3))) Or _
                    ((Cells(j, 1) = arr(x, 1) Or Cells(j, 1) = arr(x, 2) Or Cells(j, 1) = arr(x, 3)) And (Cells(j, 3) = arr(x, 1) Or Cells(j, 3) = arr(x, 2) Or Cells(j, 3) = arr(x, 3))) Or _
                    ((Cells(j, 2) = arr(x, 1) Or Cells(j, 2) = arr(x, 2) Or Cells(j, 2) = arr(x, 3)) And (Cells(j, 3) = arr(x, 1) Or Cells(j, 3) = arr(x, 2) Or Cells(j, 3) = arr(x, 3))) Then
                    GoTo Return2
                End If
            Next
    Next j
End Sub
 
Цитата
slesarok написал:
2. Чтобы в разных строках не было по 2х одинаковым чисел
Поясните это на примере.
Изменено: Karataev - 27.06.2022 15:10:28
 
не может быть:
127
671
в первой строке встречаются 7,1
и во второй строке 7,1

Кстати, заметил, что если не установлен параметр
Код
Randomize
То
Код
rDig = Int(Rnd * 7 + 1)
Всегда первое значение - 5.
Почему?
 
Посмотрите такой вариант
 
открывайте файл.
жмите F9
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
MCH, Ігор Гончаренко, спасибо большое!
Оба варианта отлично работают. На Ваших примерах поучусь работе случайных чисел!

Спасибо!
Страницы: 1
Наверх