自己相関の 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
© Copyright 2024 Paperzz