VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 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


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -