Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在VBA中用excel中的公式创建函数_Excel_Vba_Excel Formula - Fatal编程技术网

在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

我正在尝试创建一个计算下降的函数。 其工作如下:

  • 我在B列有一系列特定股票的报价:B(示例)
  • 我想知道最大的降幅,也就是说,报价中最大的降幅是多少。
  • 在这种情况下,最大压痕出现在黄色区域!也就是说,公式如下所示:Drawdown=(MaxValue/Value)-1==>Drawdown=(13/9)-1

    我做了如下尝试,但没有结果:

    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”相同的事情。太好了!非常感谢。我将研究“应用程序”功能是如何工作的(以前:工作得很好!如果你不要求太多的话,你能给我解释一下这个功能是如何工作的吗?)