2017-10-13 46 views
1

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

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

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.

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

回答

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 
+0

谢谢,我知道环路错误是这样的,但我的想法如何使它工作 – telesien

+1

BTW有你为什么宣布结果并滚动长,当整数应该以任何理由足够? – telesien

+0

在这种情况下可能是一种很差的习惯。我习惯于使用它来避免溢出错误,但是在这种情况下你不会冒这个问题。所以你是对的。已更正 – Tom

0

循环是错误的。你不能在条件,然后再次积累,因为这些已经是2卷。

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

结果= 0 待办事项 卷= ... 结果=结果+卷 循环而卷<> 6