VBA 配列に格納した値の平均のやり方についてお教え願います
いつもお世話になります。
配列に格納した値の平均のやり方についてお教え願います。
現在、実験測定データの移動平均(下記avg(x,1))を計算をしたいのですが、
配列に格納した値の平均が思うように計算できず困っております。
a =Range("A1:A20000")‘測定データを配列に格納
avg(x, 1) = Application.WorksheetFunction.average(a(x, 1), a(x + 5, 1))
という記述方法ではa(x, 1)とa(x + 5, 1)の2点の平均になってしまいます。
これをa(x, 1), a(x+1, 1),a(x+2, 1),a(x+3, 1) ,a(x+4, 1) ,a(x+5, 1)の5点の平均が計算できる記述方法はないでしょうか?
○実際の式は下のようなもので移動平均の平均区間yも変化します。
Dim avg(1 To 20000, 1 To 1)
-前式省略-
For y = 1 To 20000
-途中式省略-
a =Range("A1:A20000")‘測定データを配列に格納
For x = 1 To 20000
avg(x, 1) = Application.WorksheetFunction.average(a(x, 1), a(x + y, 1))
‘↑これでは2点の平均値になってしまいます。
Next
-途中式省略-
Next
-後式省略-
○Range(“B1”)=AVERAGE(A1:OFFSET(A1,y-1,0))
Range(“B2”)=AVERAGE(A2:OFFSET(A2,y-1,0))
・・・
というふうにセルに一つずつaverage関数を入力すれば移動平均も計算できるのですが、繰り返し回数が多いため、計算に非常に時間がかかります。そのため上記配列を利用したもので計算したいと思います。
○ ネットでヒントを見つけたのですが↓
Set ran = Range(Range("A1"), Range("A1").End(xlDown))
Range("C4").Value = WorksheetFunction.average(ran)
こう記述すればある範囲内の平均を求められるようですが、
Set ran= 以降の部分をRange(***)ではなく、
Set ran = (a(x, 1), a(x + y, 1)) ←a(x, 1)~a(x + y, 1)まで、というイメージですが・・・
というふうに範囲を配列で表すやり方を教えて頂けるだけでも結構です。
excel2003です。
以上、よろしくお教え願います。
お礼
ご回答ありがとうございます。 ネットでいろいろ調べましたが、miran 2006さんが教えてくださったことで合ってるみたいです。 非常に勉強になりました。