Рандомизировать карту Кено - PullRequest
0 голосов
/ 27 апреля 2018
Sub GetRandomCell()
    Range("A1:J10").Select
    For Each Cell In Selection
        If Cell.Interior.Color = vbYellow Then
            Cell.Interior.Color = vbWhite
        End If
    Next

    Dim i       As Integer
    Dim RNG     As Range

    Set RNG = Range("A1:J10")

    Dim randomCell As Long

    i = 1        
    Do While i < 20
        randomCell = Int(Rnd * RNG.Cells.Count) + 1
        If RNG.Cells(randomCell).Interior.Color <> vbYellow Then
            RNG.Cells(randomCell).Interior.Color = vbYellow
            i = i + 1
        End If
    Loop
End Sub

Это код, который я использую для создания рандомизированной карты кено. Однако в последние несколько раз мы играли (нас около 20), некоторые из нас обнаружили, что мы играем на одной карте. Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

RNG.Cells(randomCell).Interior.Color не выводится в виде строки - оно выводится в виде числа. vbYellow - 65535 для Excel.

Итак, вам нужно настроить выражение If на:

If RNG.Cells(randomCell).Interior.Color <> 65535 Then

РЕДАКТИРОВАТЬ: Как отмечено в комментариях, нет функциональной разницы между термином vbYellow и числом 65535. Это решение не решит проблему выше, но я оставляю это, потому что информация в комментариях интересна.

0 голосов
/ 28 апреля 2018

Вы можете использовать функцию Randomize, чтобы рандомизировать начальное число для функции Rnd. Вызывайте его в каждой итерации, чтобы убедиться, что Rnd не использует одно и то же начальное число, и вы получите не очень случайные результаты:

Sub GetRandomCell()
    Range("A1:J10").Select
    For Each Cell In Selection
        If Cell.Interior.Color = vbYellow Then
            Cell.Interior.Color = vbWhite
        End If
    Next

    Dim i       As Integer
    Dim RNG     As Range

    Set RNG = Range("A1:J10")

    Dim randomCell As Long

    i = 1
    Do While i < 20
        Randomize
        randomCell = Int(Rnd * RNG.Cells.Count) + 1
        If RNG.Cells(randomCell).Interior.Color <> vbYellow Then
            RNG.Cells(randomCell).Interior.Color = vbYellow
            i = i + 1
        End If
    Loop
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...