1

当我尝试获取两个数组Arr1Arr2的相关系数时,我在 VBA 中遇到了这个错误

Dim arr1() As Variant
Dim arr2() As Variant

arr1 and arr2 are initialized in the function.

Dim result As Double
result = Application.WorksheetFunction.Correl(arr1, arr2)

Correl方法抛出异常

“无法获取工作表函数类的相关属性”

任何想法可能是异常的原因。

编辑 :

我认为当数组之一的所有元素都相同时会出现此问题。在这种情况下,相关系数会导致#DIV0 错误。

谢谢

4

3 回答 3

1

基兰,

防止此错误的两种可能的解决方案...但是查看您的数据会更有帮助

  1. 您的一个(或两个)变体数组包含字符串而不是数字
  2. 您的数组大小不相等
于 2012-08-15T06:38:43.197 回答
0

我认为您忘记了初始化数组。

这个非常简单的例子有效:

Public Sub Test()
    Dim arr1() As Variant
    Dim arr2() As Variant
    Dim result As Double

    arr1() = Array(1, 2, 3, 4)
    arr2() = Array(1, 2, 3, 4)

    result = Application.WorksheetFunction.Correl(arr1, arr2)

    MsgBox ("The result is: " & result)
End Sub
于 2012-08-15T06:29:44.260 回答
0

与许多工作表函数一样,for 的参数Application.WorksheetFunction.Correl必须具有 Range,而不是 Variant 类型。

此外Correl,这两个范围中的任何一个的函数标准偏差都不能为 0。

空值而不是零有时也会导致此错误。

不遵循这些规则,会导致 OP 遇到完全相同的错误。

Dim A as Range, B as Range
Dim myStDevA as Double, myStDevB as Double, myCorrel as Double

myStDevA = Application.WorksheetFunction.StDev(A)
myStDevB = Application.WorksheetFunction.StDev(B)

If myStDevA <> 0 and myStDevB <> 0 Then myCorrel = Application.WorksheetFunction.Correl(A,B)
于 2018-05-14T01:43:22.737 回答