VBA 运行循环直到MsgBox中有X个例子

VBA Run Loop until have X examples in MsgBox

今天我正在尝试 运行 使用 "for" 的基本循环。我想 运行 一个循环,直到我在 MsgBox 中得到 20 个介于 26 - 28 之间的随机数。

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 次,直到它给我 26 - 27 之间的 20 个数字。

欢迎大家提出建议!谢谢

您正在寻找的是 Do-Loop UntilDo While-Loop 循环。这种循环运行s,直到满足一个条件。在您的情况下,该条件将是“打印了 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

更改随机化以给出小于 3 的数字,然后添加 26。

Rnd() returns [0, 1] 之间的数字,将其乘以 28 永远不会得到 28。而且经常会得到低于 28 的数字,这在输出中被避免了,因为你的 if 块。

f = (Rnd() * 3) 将给出 [0, 3] 之间的随机数。

f = ((Rnd() * 3) + 26) 将给出 [26, 29] 之间的随机数。