如何在VBA中实现COVAR公式?

How to implement the COVAR formula in VBA?

我一直在计算两只股票的方差,它需要协方差才能完成计算。但是我想用VBA来实现公式。

RangeG4:G25有微软的returns和RangeH4:H25的数据有 returns Apple Inc. 的数据和 Range I4:I25 有 returns Facebook 的数据和 Range J4:J25 有 returns Exxon 的数据。

我已将范围 G4:G25 命名为 Range1 并将范围 H4:H25 命名为 Range2 和 I4:I25 作为 Range3 和 J4:J25 作为 Range4

下面是我的代码

Dim data1 As Integer
Dim data2 As Integer

If ComboBox1 = "microsoft" Then data1 = Range("Range1").Select
If ComboBox1 = "facebook" Then data1 = Range("Range3").Select
If ComboBox2 = "apple" Then data2 = Range("Range2").Select
If ComboBox2 = "exxon" Then data2 = Range("Range4").Select
Range("G32").Formula = "=COVAR(Range(data1),Range(data2))"

我没有得到这个协方差公式的任何结果。我收到“#NAME?”单元格 G32 中的错误。这里的任何帮助将不胜感激。提前致谢

请这样尝试:

Sub testCovarFunction()
  Dim data1 As Range, data2 As Range

    If ComboBox1 = "microsoft" Then
        Set data1 = Range("Range1")
    ElseIf ComboBox1 = "facebook" Then
        Set data1 = Range("Range3")
    End If

    If ComboBox2 = "apple" Then
        Set data2 = Range("Range2")
    ElseIf ComboBox2 = "exxon" Then
        Set data2 = Range("Range4")
    End If
    Range("G32").Formula = "=COVAR(" & data1.Address & "," & data2.Address & ")"
End Sub

如果您需要 VBA 中的所有内容,请尝试此代码:

Sub testCovarFunctionBis()
  Dim data1 As Variant, data2 As Variant

    If ComboBox1 = "microsoft" Then
        data1 = Range("Range1").value
    ElseIf ComboBox1 = "facebook" Then
        data1 = Range("Range3").value
    End If

    If ComboBox2 = "apple" Then
        data2 = Range("Range2").value
    ElseIf ComboBox2 = "exxon" Then
        data2 = Range("Range4").value
    End If
    Range("G32").value = WorksheetFunction.Covar(data1, data2)
End Sub

试试这个:

Sub SubCovarFormula()

    Dim data1 As Integer
    Dim data2 As Integer

    If ComboBox1 = "microsoft" Then data1 = Excel.WorksheetFunction.Sum(Range("Range1"))
    If ComboBox1 = "facebook" Then data1 = Excel.WorksheetFunction.Sum(Range("Range3"))
    If ComboBox2 = "apple" Then data2 = Excel.WorksheetFunction.Sum(Range("Range2"))
    If ComboBox2 = "exxon" Then data2 = Excel.WorksheetFunction.Sum(Range("Range4"))

    Range("G2").Formula = "=COVAR(" & data1 & "," & data2 & ")"

End Sub

告诉我它是否有效,欢迎随时提出任何说明。

您可以随时打开您的宏录制器并单击包含您需要转换为 VBA 的任何函数的单元格,您将拥有您需要的所有代码。您几乎肯定会拥有比您需要的更多的代码,但这是另一回事了。