将多个用户定义函数之一分配给宏中的新定义函数

时间:2019-05-13 20:01:15

标签: excel vba

我有一个excel文件,在其中遍历矩阵并想为矩阵中的每个单元格计算一些内容。 我使用以下方法

Dim x, i As Integer
For x = 1 To 10
    For i = 7 To 50
     Cells(i, x).Formula = Dummy(optionType, S, 6750, T, r, b, v)
    Next i
Next x

Dummy是我编写的函数。

Function Dummy(optionType As String, S As Double, K As Double, T As Double, _
            r As Double, b As Double, v As Double, Optional dS)

Dummy = 1
End Function 

但是,问题是在文件中,我还指定了要在循环中使用的函数。该规范位于单元格A1中。因此,例如,如果A1 = 1,我想使用我自己的用户定义函数function_1,则2是我自己定义的函数function_2等。重要的是,对于每个单元格,该函数为相同。所以我需要在循环之前指定它。否则,宏将比所需的速度慢,因为它会检查每个单元格中位于A1中的值。我通过首先使用简单的哑变量尝试了Stackoverflow post中的方法,然后运行了一个新的宏,并用指定的函数替换了哑函数。这不起作用,因为Dummy函数的输出为1

可能的功能的示例是

Function GammaBS(optionType As String, S As Double, K As Double, T As Double, _
            r As Double, b As Double, v As Double, Optional dS)

Dim d1 As Double

d1 = (Log(S / K) + (r + v ^ 2 / 2) * T) / (v * Sqr(T))
GammaBS = (Application.WorksheetFunction.Norm_S_Dist(d1, False) * Exp((b - r) * T)) / (S * v * Sqr(T))

End Function

问题:如何在宏中将定义的函数用作新函数?

1 个答案:

答案 0 :(得分:0)

我不建议从VBA编写VBA。应该没有理由这样做。您必须关闭MS所做的一些安全设置,以阻止您执行此操作。这不安全。

如果您只需要一个更动态的公式,则添加更多变量。将A1中的值作为参数传递给公式,而不要尝试编写新公式。这样可以避免破坏代码。

Function GammaBS(optionType As String, S As Double, K As Double, T As Double, _
        r As Double, b As Double, v As Double, Optional dS, Optional Aone)

       If Aone = "the value you are looking for in A1" Then
           `Do the thing you want this new function to do