同样的疑问:https://stackoverflow.com/questions/24260344/dice-notation-in-excel-advanced-mode
我也建议在这里问。所以我就这么做了。
我问是否有人可以为我制作一个 Excel 的“用户定义函数”,用于计算以骰子符号表示的方程式(对于角色扮演游戏,例如 1d6+3)
这是结果(效果非常好)在 excel 中用骰子表示
现在,我还需要三个功能。
1) RollMax(A1) 将给出 A1 的最大值(如果 A1 = 1d6+3,则结果为 9)
2) RollMin(A1) 将得出 A1 的最小值(如果 A1 = 1d6+3,则结果为 4)
3) RollAve(A1) 得出 A1 的平均值(如果 A1 = 1d6+3,结果为 6)
我需要它的方式与 Gary 在链接帖子中制作的 Rolldice() 相同。它将被不懂 excel 的玩家使用,我希望它尽可能无缝。(RollDice() 解释如下:https://stackoverflow.com/questions/24253155/dice-notation-in-excel)
多谢
此致
编辑1:
Dim 分配空间来创建变量?对程序说“我将使用这些函数/变量,为它们保留一个未定义的空间”?
Deemode 到底是做什么的?
r.Value 起什么作用?
編輯 :2
谢谢你的回答。我正在努力
答案1
我将在这里重新发布 Gary 的学生的代码并附上一些额外的评论。
要查看发生了什么,最简单的方法是将代码中断放在靠近开头的一行中,然后按 F9 键,使用 F9 键逐步执行。我会在构建函数的 NewForm 字符串中添加一个监视
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 the code finds a d it knows its a dice roll so it needs a randbetween function
If ch = dee Then
NewForm = NewForm & "*RANDBETWEEN(1,"
deemode = True
Else
'If the character is a operator +-* then close the brackets of the rand between
If Not IsNumeric(ch) And deemode Then
deemode = False
NewForm = NewForm & ")"
End If
'If the code doesn't find a d add that character to the end of the function
NewForm = NewForm & ch
End If
Next i
If deemode Then
NewForm = NewForm & ")"
End If
RollDice = Evaluate(NewForm)
End Function
现在,例如,如果您想要一个 rollmax,您需要更改它在找到骰子时执行的操作,因为您不需要 randetween 函数。尝试其他两个,如果您遇到问题,请发布具体问题,而不是“为我编写此代码”。
Public Function Rollmax(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 & "*"
deemode = True
Else
If Not IsNumeric(ch) And deemode Then
deemode = False
NewForm = NewForm & ""
End If
NewForm = NewForm & ch
End If
Next i
Rollmax = Evaluate(NewForm)
End Function
编辑:
是的,dim 正在声明变量。使用变量声明,你可以用 dim 在新行开始每个变量,也可以用逗号将它们串在一起
Deemode 到底是做什么的?Deemode 是一个真假标志,当在字符串中找到“d”时会打开。当它发现非数字(通常是 +-*)时,它会关闭。
r.Value 有什么用?r 是对单元格的引用。r.value 返回该单元格的值(在本例中为骰子字符串)。