2017-10-13 12 views
1

VBAダイスロールは私にとっても非常に簡単ですが、ロールタイプ6が必要な場合はロールバックして2つのロールを一緒に加えることができます。あなたは3番目のロールを取得するなど)。VBAダイスロール追加

私は2つのアプローチを試みたが、二回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 

これを第3のロールを与える必要があるため、両方は、

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 

この1つはしかし、明らかに不可能である12の結果を生成することができる失敗しましたそれが戻ってくる可能性があるため、さらに悪化します。

私はハイとローの検索を試みましたが、シンプルなスローのコード、2つのダイスとロールのロール特定の結果を再表示することができます。このオプションとは異なり、やはりすべてのオプションがかなり簡単です

答えて

1

あなたの問題はあなたがに対してテストするために乱数を生成し、別の発生しているている間 ロール= ... 結果=結果+ロール ループを実行します。 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

を動作させるためにどのようなアイデアの外でしたあなたがいる限り、整数であるべきときの結果とロールを宣言する理由何らかの理由があります十分な? – telesien

+0

おそらくこの場合は習慣が悪いです。私はそれを使用してオーバーフローエラーを回避することに慣れていますが、この場合はその問題を危険にさらすことはありません。だからあなたは正しい。訂正しました – Tom

0

ループが間違っています。 ロールの状態で、そしてロールは、すでに2ロールであるので、再び蓄積することはできません。

基本的には、条件が最後になるループです。

結果= 0 ロール<> 6

関連する問題