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