VBA Run Loop, пока есть X примеров в MsgBox - PullRequest
0 голосов
/ 24 октября 2018

Сегодня я пытаюсь запустить базовый цикл, используя "for".Я хотел бы запустить цикл, пока я не получу 20 случайных чисел между 26 - 28 в MsgBox.

Sub C7()

    Dim b As Integer
    Dim f As Single
    Dim ret As String

    For b = 1 To 20
        f = Rnd() * 28
        If f >= 26 And f <= 28 Then
        ret = ret & Str(f)

        End If
    Next b

        MsgBox ret

End Sub

Следующий код запускает цикл 20 раз и выдает все значения между 26 - 28 (обычно не болеечем 3).Мне нужен код, который будет запускать цикл X-раз, пока он не даст мне 20 чисел в интервале от 26 до 27.

Любой совет приветствуется!Спасибо

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Измените рандомизацию, чтобы получить число меньше 3, а затем добавьте 26.

Rnd () возвращает число в диапазоне [0, 1), умножение на 28 никогда не приведет к 28. И частов результате число ниже 28, которое избегается из-за вашего блока if.

f = (Rnd() * 3) даст случайное число между [0, 3).

f = ((Rnd() * 3) + 26)дать случайное число между [26, 29).

0 голосов
/ 24 октября 2018

То, что вы ищете, это петля Do-Loop Until или Do While-Loop.Этот вид цикла выполняется до тех пор, пока не будет выполнено условие.В вашем случае это условие будет «напечатано 20 сообщений».

Цикл Do While-Loop проверяет условие при запуске, поэтому, если условие сначала равно False, цикл не запустится.

Цикл Do-Loop Until проверяет условие в конце, поэтому цикл будет выполняться как минимум один раз.

Пример кода, следующий за вашим предыдущим циклом For:

Sub C7()

Dim b As Integer
Dim f As Single
Dim ret As String
dim count as Integer: count = 0

Do
    f = Rnd() * 28
    If f >= 26 And f <= 28 Then
        ret = ret & Str(f)
        count = count + 1
    End If
Loop until count = 20

    MsgBox ret

End Sub
...