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

时间:2018-10-24 19:08:32

标签: vba loops msgbox

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

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个数字。

欢迎任何建议!谢谢

2 个答案:

答案 0 :(得分:2)

将随机数更改为小于3的数字,然后加26。

Rnd()返回[0,1)之间的数字,将其乘以28永远不会得到28。并且经常会导致数字低于28,由于if块,在输出中会避免该数字。

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

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

答案 1 :(得分:0)

您正在寻找的是Do-Loop UntilDo 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