2017-10-13 48 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