我有一个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
问题:如何在宏中将定义的函数用作新函数?
答案 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