VBA骰子卷添加

时间:2017-10-13 09:37:05

标签: vba excel-vba loops random dice

VBA骰子卷对我来说非常容易,但是我需要特定的类型,当滚动6意味着你可以再次滚动并将两个卷加在一起(加上你连续两次滚动6次,你得到第三次滚动和等等。)

我尝试了两种方法,但都失败了

Sub roll_dice_1()

Dim result As Range

Set result = Range("A1")

result = Application.WorksheetFunction.RandBetween(1, 6)

If result = 6 Then
  result = result + Application.WorksheetFunction.RandBetween(1, 6)
  Do Until Application.WorksheetFunction.RandBetween(1, 6) <> 6
  result = result + Application.WorksheetFunction.RandBetween(1, 6)
  Loop
   Else
End If

End Sub

然而,这个可以产生12的结果,这显然是不可能的,因为两次6应该给出第三次滚动

Sub roll_dice_2()

Dim result As Range

Set result = Range("A1")

result = Application.WorksheetFunction.RandBetween(1, 6)

If result = 6 Then
  Do Until Application.WorksheetFunction.RandBetween(1, 6) <> 6
  result = result + Application.WorksheetFunction.RandBetween(1, 6)
  Loop
   Else
End If

End Sub

这个更糟糕,因为它可以返回6。

我尝试过高低搜索,但我得到的只是简单的简单投掷代码,有两个骰子的滚动和滚动,当某些结果可以重新滚动时。所有选项都很容易,不像这个

4 个答案:

答案 0 :(得分:1)

您的问题是,您正在生成一个随机数进行测试,然后生成另一个数字以添加到您的结果中。他们需要是一样的。 VBA也有它自己的随机功能。

Sub roll_dice()
    Dim result As Integer, roll as Integer
    Dim lowerbound As Integer, upperbound As Integer

    lowerbound = 1
    upperbound = 6

    result = Int((upperbound - lowerbound + 1) * Rnd + lowerbound)

    If result = upperbound Then
        roll = result
        Do While roll = upperbound
          roll = Int((upperbound - lowerbound + 1) * Rnd + lowerbound)
          result = result + roll
        Loop
    End If

    MsgBox result
End Sub

答案 1 :(得分:0)

循环错误。你不能在条件中滚动然后滚动再次累积,因为它们已经是2卷。

基本上你需要的是一个条件最后的循环,例如

结果= 0 做 滚动= ... 结果=结果+滚动 滚动时循环&lt;&gt; 6

答案 2 :(得分:0)

如果处理6,似乎是一个问题,如果要重新滚动,则应实施:

... 卷= 6

do while roll = 6
 roll = Int(( 6 * Rnd + 1)
 ShowRoll(roll)
loop

DoStuffWithRollValue

...

这将显示每卷,直到第1-5行 ShowRoll是对动画或其他显示角色的方法的调用

答案 3 :(得分:0)

Sub roll_dice()
    Dim die1, die2 As Integer
    
    'Randomize
    die1 = (Hour(Rnd) Mod 6) + 1
    die2 = (Hour(Rnd) Mod 6) + 1
Exit Sub