【问题标题】:VBA Run Loop until have X examples in MsgBoxVBA 运行循环,直到在 MsgBox 中有 X 个示例
【发布时间】:2018-10-24 19:08:32
【问题描述】:

今天我正在尝试使用“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 个数字。

欢迎任何建议!谢谢

【问题讨论】:

  • 只需使用Rnd() + 26
  • 要得到这20个数字,在ret = ret &amp; Str(f) else b = b -1 之后添加一个else语句
  • 感谢共产国际,这实际上解决了它。但是如果我需要生成 26 - 30 的数字怎么办?甚至 26,4 | 28,1 | 27,3等?我将相应地编辑我的问题

标签: vba loops msgbox


【解决方案1】:

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

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

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

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

【讨论】:

  • 赞成最有效的解决方案。但是,我为“运行循环 X 次,直到发生某些事情”提供了一个通用答案,OP 应该检查。
  • 谢谢先生!这正是我想要的。
【解决方案2】:

您正在寻找的是 Do-Loop UntilDo While-Loop 循环。这种循环一直运行直到满足条件。在您的情况下,该条件将是“打印 20 条消息”。

Do While-Loop 循环在开始时检查条件,所以如果条件一开始是False,则循环不会运行。

Do-Loop Until 循环检查最后的条件,因此循环将至少运行一次。

您之前的@​​987654326@ 循环之后的示例代码:

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

【讨论】:

  • 嗨 Nicholas,目前我正在练习“For”,但“Do-Loop Until”对我的下一个任务非常有用。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2019-02-24
  • 1970-01-01
  • 2021-08-27
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多