我在excel中遇到问题,我需要知道更好的人的帮助。
快速故事:我是一个rolist,我在excel上做字符表,我需要做dice notation
calcul。
我需要能够在单元格中写入3d6+2d4+6
或3d8+2+3d9-2d6
或任何组合。然后在另一个单元格中计算结果。
类似于Rolldice(A1)
,它会计算它(如果3d8+2+4d8
给出它会给出9
和58
之间的数字
Basicaly 1d6
表示1
骰子有六张脸,因此是1
和6
之间的随机数。 2d6
意味着1d6 + 1d6
(因此是2
和12
之间的数字)
我不介意结果是否需要我在braquets之间设置骰子,如:(3d6)+2+(4d8)
它应该能够添加,减去或倍增骰子
1dX + 1dX or 1dX - 1dX or 1dX * 1dX
我会非常感谢能够做到这一点的人。
我希望自己足够清楚。如果需要,请随时询问规格。
致以最诚挚的问候,
ps:感谢我解决了我缺乏英语的问题。看到评论并从中学习它真是太棒了!答案 0 :(得分:0)
我会看看RAND和RANDBETWEEN函数
设置一个表格,列出骰子选择1卷,2卷等,并使用这些函数计算输入值。
将输入与计算表分开。从计算中分离输入和单独输出。您甚至可以在工作簿中使用不同的工作表。
首先不要担心注释,让功能正常工作。
然后,您可以使用字符串CONCATENATE格式化输出以构建表示法。
条件格式化仅在excel单元格中具有不同值时使用,并且可能在此处不适用。
答案 1 :(得分:0)
假设我们在 A
列中有骰子表达式高亮显示细胞并运行这个小宏:
Sub DiceXlator()
Dim r As Range, v As String, NewForm As String, deemode As Boolean
Dim dee As String
dee = "d"
deemode = False
For Each r In Selection
v = r.Value
NewForm = "="
For i = 1 To Len(v)
ch = Mid(v, i, 1)
If ch = dee Then
NewForm = NewForm & "*RANDBETWEEN(1,"
deemode = True
Else
If Not IsNumeric(ch) And deemode Then
deemode = False
NewForm = NewForm & ")"
End If
NewForm = NewForm & ch
End If
Next i
If deemode Then
NewForm = NewForm & ")"
End If
r.Offset(0, 1).Formula = NewForm
Next r
End Sub
宏将每个骰子表达式转换为标准Excel公式,并将公式放在列 B
列中的相邻单元格中以下是输入/输出
的一个小例子
修改#1:强>
以下是用户定义函数 - UDF
形式的相同逻辑Public Function RollDice(r As Range) As Variant
Application.Volatile
Dim v As String, NewForm As String, deemode As Boolean
Dim dee As String
dee = "d"
deemode = False
v = r.Value
NewForm = "="
For i = 1 To Len(v)
ch = Mid(v, i, 1)
If ch = dee Then
NewForm = NewForm & "*RANDBETWEEN(1,"
deemode = True
Else
If Not IsNumeric(ch) And deemode Then
deemode = False
NewForm = NewForm & ")"
End If
NewForm = NewForm & ch
End If
Next i
If deemode Then
NewForm = NewForm & ")"
End If
RollDice = Evaluate(NewForm)
End Function
修改#2:强>
从统计意义上讲,可以获得 Min,Max,和 Average 。例如,在 B1 中输入:
=RollDice($A$1)
然后从 B3 复制 B2 B1000
最后使用:
=MAX(B1:B1000)
=MIN(B1:B1000)
=AVERAGE(B1:B1000)