投稿日 | : 2002/11/14(Thu) 15:21 |
投稿者 | : A221 |
Eメール | : |
URL | : |
タイトル | : Re: VBでのExcel関数の利用 |
> 初めまして、かっちゃんと申します。
> VBでExcelのCorrel関数(二つの配列を元に相関係数を求める関数)を使う必要が生じ、
> 次の様にコーディングしたのですが、”WorksheetFunctionクラスのCorrelプロパティ
> を取得できません”というエラーが出てしまい、うまく結果を得ることが出来ません。
> 解決策のヒントでも結構ですのでRESをお願いいたします。
結構苦労したワリに駄プログラムになりましたが、結果を得られない原因は
配列を渡さねばならないことです。
Rangeオブジェクトで渡した場合、書式が標準では文字列で関数に渡されるため
下側のサブルーチンで数値にしています。
また、CorrelがDiv/0を返す場合もエラーで飛びました。
下記、Excel2002にて動作確認。
------------------------------------------------------------------
Option Explicit
Private xlApp As Excel.Application
Private xlbook As Workbook
Private xlSheet As Excel.Worksheet
Private Sub test1()
Dim renum As Double
Dim Xdim As Variant
Dim Ydim As Variant
Set xlApp = New Excel.Application
'ここで、xlsheetにシートオブジェクトを割り当ててください。
Call RangeToDim("d1:E30", Xdim)
Call RangeToDim("F1:G30", Ydim)
renum = xlApp.WorksheetFunction.Correl(Xdim, Ydim)
MsgBox renum
Set xlApp = Nothing
End Sub
Sub RangeToDim(ByVal X As String, ByRef Y As Variant)
Dim xlrange As Excel.Range
Dim tmpdim As Variant
Dim i As Long
Dim j As Long
Dim ColCount As Long
Set xlrange = xlSheet.Range(X)
tmpdim = xlrange.Formula
ColCount = xlrange.Count \ UBound(tmpdim)
For i = 1 To UBound(tmpdim)
For j = 1 To ColCount
tmpdim(i, j) = CLng(tmpdim(i, j))
Next j
Next i
Y = tmpdim
End Sub