在VBA中用excel中的公式创建函数
我正在尝试创建一个计算下降的函数。 其工作如下:在VBA中用excel中的公式创建函数,excel,vba,excel-formula,Excel,Vba,Excel Formula,我正在尝试创建一个计算下降的函数。 其工作如下: 我在B列有一系列特定股票的报价:B(示例) 我想知道最大的降幅,也就是说,报价中最大的降幅是多少。 在这种情况下,最大压痕出现在黄色区域!也就是说,公式如下所示:Drawdown=(MaxValue/Value)-1==>Drawdown=(13/9)-1 我做了如下尝试,但没有结果: Public Function MDD(ByVal Selection0, ByVal Selection1) 'Function Max DrawDo
Public Function MDD(ByVal Selection0, ByVal Selection1)
'Function Max DrawDown
Dim i As Long
Dim Drawdown0 As Long
Dim Drawdown1 As Long
i = 2
Drawdown0 = "(" & Selection0 & "/MAX(" & Selection1 & ")) - 1"
While i < Plan1.Range("B" & Rows.Count).End(xlUp).Row + 1
Drawdown1 = "(" & Selection0 & "/MAX(" & Selection1 & ")) - 1"
If Drawdown1 > Drawdown0 Then
Drawdown0 = Drawdown1
End If
i = i + 1
Wend
MDD = Drawdown0
End Function
Sub lsMDD()
Application.MacroOptions Macro:="MDD", Category:=4
End Sub
公共函数MDD(ByVal选择0,ByVal选择1)
'函数最大压降
我想我会坚持多久
暗淡的下降0倍长
暗淡的下降1倍长
i=2
Drawdown0=“(”&Selection0&“/MAX(“&Selection1&”)-1”
而iDrawdown0,则
下降0=下降1
如果结束
i=i+1
温德
MDD=下降0
端函数
子lsMDD()
Application.MacroOptions宏:=“MDD”,类别:=4
端接头
错误在哪里?您不需要在该范围内迭代。看看申请表它有你需要的一切
Public Function MDD(ByVal pRange As Variant) As Variant
MDD = Application.WorksheetFunction.Max(pRange) / Application.WorksheetFunction.Min(pRange) - 1
End Function
您不需要在该范围内迭代。看看申请表它有你需要的一切
Public Function MDD(ByVal pRange As Variant) As Variant
MDD = Application.WorksheetFunction.Max(pRange) / Application.WorksheetFunction.Min(pRange) - 1
End Function
看起来你把公式和VBA混为一谈了
Drawdown0=“(”&Selection0&“/MAX(&Selection1&)”)-1“
正在尝试将字符串(文本)分配给Long
@BigBen,我需要使用公式计算或检索排列值之间的最大值... 在这种情况下,我不确定如何做。Application.Max
可能会有所帮助。您必须将公式逻辑转换为VBA。似乎您将公式和VBA混为一谈Drawdown0=“(”&Selection0&“/MAX(&Selection1&)”)-1“
正在尝试将字符串(文本)分配给Long
@BigBen,我需要使用公式计算或检索排列值之间的最大值... 在这种情况下,我不确定如何做。Application.Max
可能会有所帮助。您必须将公式逻辑转换为VBA。MDD接受一个参数pRange,它是覆盖源数据的范围,例如A1:A10。Application.WorksheetFunction向VBA公开许多Excel工作表函数。在这里,我只是使用工作表函数的Max和Min来做与工作表上的公式“=Max(A1:10)/Min(A1:A10)-1”相同的事情。太好了!非常感谢。我将研究“应用程序”函数是如何工作的(以前:工作得很好!如果你不要求太多,请你向我解释一下这个函数是如何工作的?)对不起…editedMDD有一个参数pRange,它是覆盖源数据的范围,比如A1:A10。Application.WorksheetFunction向VBA公开许多Excel工作表函数。在这里,我只是使用工作表函数的Max和Min来做与工作表上的公式“=Max(A1:10)/Min(A1:A10)-1”相同的事情。太好了!非常感谢。我将研究“应用程序”功能是如何工作的(以前:工作得很好!如果你不要求太多的话,你能给我解释一下这个功能是如何工作的吗?)