Arrary Variable используется в диапазоне - PullRequest
0 голосов
/ 05 февраля 2020
Sub Bingo()

Dim Bingo(75) As String
Dim rndNum As Integer
Dim count As Integer

For j = 1 To 75

    If j >= 1 And j < 16 Then Bingo(j) = "B" & j
    If j >= 16 And j < 31 Then Bingo(j) = "I" & j
    If j >= 31 And j < 46 Then Bingo(j) = "N" & j
    If j >= 46 And j < 61 Then Bingo(j) = "G" & j
    If j >= 61 And j < 76 Then Bingo(j) = "O" & j

    Debug.Print Bingo(j)

Next j

count = 0

Do Until count > 75

count = count + 1

MsgBox "Please press OK to continue"

Redraw:

Randomize

rndNum = Int((75 - 1 + 1) * Rnd + 1)

If Bingo(rndNum) = "" Then

    GoTo Redraw

Else

    Sheet1.Range(L13).Value = Bingo(rndNum)
    Sheet1.Range("A" & count) = Bingo(rndNum)
    Bingo(rndNum) = ""


End If

1 Ответ

2 голосов
/ 05 февраля 2020

Ваш код проблематичен c по нескольким причинам, основной из которых является то, что он может работать ОЧЕНЬ долго. Поскольку вы стираете значение из своего массива каждый раз, когда используете его, вы в конечном итоге получите состояние, в котором у вас есть массив из 74 пробелов и только одно значение - и вы ожидаете, пока генератор случайных чисел случайным образом генерировать индекс этого последнего значения в массиве. Вы будете ждать долго.

Вот пример решения, которое создает Collection вместо массива. Причина, по которой я здесь использую коллекцию, состоит в том, чтобы легко удалить запись после того, как мы добавим ее на лист.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...