2 自己相関のVBA CODE 2.1 関数 2.2 標本自己共分散のVBA CODE

自己相関の VBA CODE
2
2.1
関数
前回とは異なり、ユーザー定義関数を作る。Sub は
値を返さないが、function は値を返す。
• 例 1 2 つの値を加える関数 Plus
function Plus(x,y)
Plus=x+y
end function
A1・A2 セルに数字を入れて、適当なセルに、=Plus(A1,A2)
function は、VBA エディタで、Function と大文字に変
換される。
2.2
標本自己共分散の VBA CODE
日付順に並んでいる 1 列のデータ系列 Y について、ラ
グ iLag(0 以上の整数) の自己共分散を求める関数 Au-
toCov を作りたい。
新しい標準モジュールに、次ページのコードを書き
入れる。
3
Option Base 1
Function AutoCov(Y, iLag)
dim
dim
dim
dim
dim
mY as double
T as integer
cnt as integer
devY() as double
Yprod() as double
mY=worksheetfunction.average(Y)
T=worksheetfunction.count(Y)
redim devY(T)
redim Yprod(T - iLag)
for cnt=1 to T
devY(cnt)=Y(cnt)-mY
next cnt
for cnt=1 to T-iLag
Yprod(cnt)=devY(cnt)*devY(cnt+iLag)
next cnt
AutoCov=worksheetfunction.sum(Yprod)/T
End Function
4
• dim devY() as double は、double 型の可変長配列
であることの宣言で、Y のデータ数 T を得た後、
redim devY(T) によって、改めて配列の個数を定
めた。Yprod() も同様。
• Option base 1 は、配列の最初の数を 1 から始める
ということ (C 言語などは、0 から始まる)
• 平均 mY を引いた変数 devY について (deviation の意味)、
ラグをつけた積を、Yprod() に格納して、その和
を T で割ったものが、自己共分散。
• ワークシート関数の average, count, sum が VBA 上
でも使える。
• エラー処理はほとんど行っていない。実行時注意。
• A1 セルから A100 セルまでにデータがあって、ラ
グ 1 の自己共分散がほしいときには=autocov(A1:A100,1)
2.3
標本自己相関係数の VBA CODE
前節で書いたコードと同じ標準モジュール内に、次
のコードを書き入れる
Function ACF(Y,iLag)
ACF=AutoCov(Y,iLag)/AutoCov(Y,0)
End Function
5