编辑1:

编辑1:

同样的疑问: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 返回该单元格的值(在本例中为骰子字符串)。

相关内容