- 締切済み
EXCEL 平均
約6万点の時系列のデータがあります。 これを1/10の6千点のデータにしグラフ表示したいと考えています。 つまり10点分のデータを平均し1つのデータに置き換える。 A1-A10 の平均を B1 にし、A11-A20 の平均を B2 にする。・・・ といった具合です。 やはりプログラム作成が早道なのでしょうか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
ユーザー関数を作れば Function avg10(a) avg10 = WorksheetFunction.Average(Range(Cells((a.Row - 1) * 10 + 1, "A"), Cells(a.Row * 10, "A"))) End Function でB1に=avg10(B1)と入れてB2以下にこの式を複写します。 ーー VBAでも同じでしょう。 最下行を捉え、10分に1+1回For Nextで繰り返せばよい。 ーー 時系列データとのことだが、機械的に10(行)個データから平均を 出してよいのかな。同じ日分の平均を出すとか必要では>
- maron--5
- ベストアンサー率36% (321/877)
>A1-A10 の平均を B1 にし、A11-A20 の平均を B2 にする B1=AVERAGE(OFFSET($A$1,(ROW(A1)-1)*10,,10)) ★下にコピー
仮に時系列のデータを次のように仮定します。 日時 値 2007/02/10 10:00 100 2007/02/10 11:00 110 1日を単位に考えれば、それだけで1/24に圧縮できます。 方法は、1列追加します(=int(日時) でOKです) 日 日時 値 2007/02/10 2007/02/10 10:00 100 2007/02/10 2007/02/10 11:00 100 このように、作ったデータにおいて、PIVOTを使います。 行に新たに作成した「日」データのところに「値」 方法は、平均を選びます。これで、目標は達成されます。 仮に、時系列が日であった場合には、 例 2007/02/01 2007/02/02 2007/02/03 2007/02/04 1列追加する列を次のようにします =INT(A1/10)*10 これは、下記のようになります。 2007/2/1 --> 2007/1/28 2007/2/2 --> 2007/1/28 2007/2/3 --> 2007/1/28 2007/2/4 --> 2007/1/28 2007/2/5 --> 2007/1/28 2007/2/6 --> 2007/1/28 2007/2/7 --> 2007/2/7 2007/2/8 --> 2007/2/7 2007/2/9 --> 2007/2/7 2007/2/10 --> 2007/2/7 2007/2/11 --> 2007/2/7 2007/2/12 --> 2007/2/7 2007/2/13 --> 2007/2/7 2007/2/14 --> 2007/2/7 2007/2/15 --> 2007/2/7 2007/2/16 --> 2007/2/7 2007/2/17 --> 2007/2/17 2007/2/18 --> 2007/2/17 2007/2/19 --> 2007/2/17 2007/2/20 --> 2007/2/17 2007/2/21 --> 2007/2/17 2007/2/22 --> 2007/2/17 2007/2/23 --> 2007/2/17 2007/2/24 --> 2007/2/17 2007/2/25 --> 2007/2/17 2007/2/26 --> 2007/2/17 これに、対し、前述と同じ、PIVOTを適用します。
- p-applepie
- ベストアンサー率53% (156/290)
B1 が A1~A10 B2 が A11~A20 B3 が A21~A30 と決まっているのであれば・・ =AVERAGE(INDIRECT("A"&ROW()*10-9&":A"&ROW()*10)) ではいかがでしょう。 ROW()は行数を出す関数です。 1行目であれば、ROW()*10-9 は 1 ROW()*10は10 2行目では ROW()*10-9は 20 ROW()*10は20 に変換されます。