1

Arr1Arr2の 2 つの配列の相関係数を取得しようとすると、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メソッドが例外をスローする

「worksheetfunction クラスの相関プロパティを取得できません」

例外の理由は何か。

編集 :

この問題は、配列の1つにすべての要素が同じ場合に発生すると思います。この場合、相関係数は #DIV0 エラーになります。

ありがとう

4

3 に答える 3

1

キラン、

このエラーを防ぐ 2 つの解決策が考えられますが、データを表示する方がはるかに役立ちます

  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

多くのワークシート関数と同様に、 の引数はApplication.WorksheetFunction.Correlバリアント型ではなく、範囲でなければなりません。

さらに、Correl関数では、これら 2 つの範囲の標準偏差が 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 に答える