プロが教えるわが家の防犯対策術!

こんばんは。

回帰分析をやってくれるワークシート関数にLinestとうのがありますが、
それの引数に、配列を渡したいのですが、うまくいきません。

データ自体はRangeではなく、Variant型の配列となっているのですが、Linestを
使うときは、一旦、シートに貼り付けて、配列→Range型に変換するなどするしか
対応できませんでしょうか。

もしくは、Linestと同等な自作関数を作っても良いのですが、もともと機能として
あるなら、Linestを使用したいと思ってます。


うまくいかない例^^;

Sub test()

Dim a(1 To 3) as Variant
Dim b(1 To 3, 1 To 2) as Variant

a(1) = 1
a(2) = 3
a(3) = 2
b(1, 1) = 4
b(2, 1) = 5
b(3, 1) = 6
b(1, 2) = 12
b(2, 2) = 15
b(3, 2) = 19

MsgBox WorksheetFunction.LinEst(a, b, True, True)

End Sub


--
エクセル2003

A 回答 (1件)

それぞれの配列をセル範囲に例えると


a(1 To 3)     は A1:C1...1行3列
b(1 To 3, 1 To 2) は A1:B3...3行2列

これを以下のように修正してxとyを対応させてあげればいいですね。

Sub test1()
  Dim a(1 To 3, 1 To 1) As Variant
  Dim b(1 To 3, 1 To 2) As Variant
  Dim c

  a(1, 1) = 1
  a(2, 1) = 3
  a(3, 1) = 2
  b(1, 1) = 4
  b(2, 1) = 5
  b(3, 1) = 6
  b(1, 2) = 12
  b(2, 2) = 15
  b(3, 2) = 19

  c = WorksheetFunction.LinEst(a, b, True, True)
  MsgBox "y= " & c(1, 2) & " *x1+ " & c(1, 1) & " *x2 " & c(1, 3)
End Sub

もしくは

Sub test2()
  Dim a(1 To 3) As Variant
  Dim b(1 To 2, 1 To 3) As Variant
  Dim c

  a(1) = 1
  a(2) = 3
  a(3) = 2
  b(1, 1) = 4
  b(1, 2) = 5
  b(1, 3) = 6
  b(2, 1) = 12
  b(2, 2) = 15
  b(2, 3) = 19

  c = WorksheetFunction.LinEst(a, b, True, True)
  MsgBox "y= " & c(1, 2) & " *x1+ " & c(1, 1) & " *x2 " & c(1, 3)
End Sub

LINESTの結果は配列を返しますから、
MsgBox WorksheetFunction.LinEst...とはできないです。

以下も参考になると思います。
『Excel 2003 およびそれ以降のバージョンの Excel の LINEST 関数について』
http://support.microsoft.com/kb/828533/ja
    • good
    • 3

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!