VBAで10行ごとの移動平均を計算する(数式は面倒・・)

Excelでデータ分析や数値の扱う際に、「過去10行の平均を毎行ごとに出したい」というケースがあります。

FXや株式取引でのテクニカル分析で扱う「移動平均線」は有名です。他にも売上やアクセス数、温度や計測値など、一定期間の推移をなめらかに見るためには移動平均がとても有効です。

ただ、Excel関数で1行ずつ手動で数式を入れるのは手間がかかりますし、対象データが増えると面倒です。

そこでこの記事では、VBAを使って、指定した列のデータに対して10行ごとの平均を自動計算して隣の列に出力する方法をご紹介します。コードを編集すれば10日間を20日間などに変更することが可能です。

マクロ概要

対象列のデータを1行ずつ読みながら、その行を含めた直近10行の平均を計算します。

計算結果を隣の列に自動で書き出します。

シートのデータが空になるまで繰り返し実行します。

コード

実行方法

株価のデータを使って実行方法を説明します。

ここではA列の「日付」昇順でE列の「終値」の10日間の移動平均をG列に出したい場合とします。

上のようにシートにデータを入力します。例では罫線を付けていますが罫線は無くても構いません。

あとは、入力したシートを表示(アクティブ)状態で上のコードのSetMovingAverage関数を実行するだけです。

実行後は以下のようにE列の各10日分の平均がG列に出力されます。

注意点

平均の対象となる10行分のデータが不足している場合もそのまま計算されます。

空白セルや非数値が混ざっている場合、エラーになることがあります。