こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルVBA 平均を可変で求めたい

はじめましてエクセルVBA初心者です。

為替の5日移動平均線を求めたいとおもっております。
以下のようなコードを書いていますが、可変で平均を計算してくれません。※1日目の平均をずっと継承してしまいます。

どのようにすれば、これを可変にできますでしょうか。
ご教示、宜しく御願いいたします。

Const AVHI1 As Integer = 5

~ 省略 ~

'最終セル
Cells(65536, 1).End(xlUp).Select
endrh = ActiveCell.Row
Range("A2").Select

~ 省略 ~

'AVHI1(5日)の終値平均 ------------------------------------------
avhi = AVHI1 + 1
Range(Cells(2, 16), Cells(endrh - AVHI1, 16)) = WorksheetFunction.Average(Range("F2:F " & avhi & ""))
Range("G1").Select

投稿日時 - 2009-01-20 01:26:53

QNo.4644764

困ってます

質問者が選んだベストアンサー

平均取得範囲が誤っています。
Range(Cells(2, 16), Cells(endrh - AVHI1, 16)) = WorksheetFunction.Average(Range("F2:F " & avhi & ""))
この場合"F2"から"F6"で5セル分の平均となっていますが
Range("P" & i) = WorksheetFunction.Average(Range("F" & i & ":F" & i + AVHI1))
この場合はiが2なら"F2"から"F7"(i+AVHI1)までの6セル分の平均となってしまっています。
avhi = AVHI1 - 1
For i = 2 To endrh - AVHI1
Range("P" & i) = WorksheetFunction.Average(Range("F" & i & ":F" & i + avhi))
Next i
とすればOKです。
また小数点3位を四捨五入ならRound(値,2)とすればできます。

投稿日時 - 2009-01-23 10:36:57

お礼

o_chi_chiさん

うまくいきました!
ありがとうございます!

投稿日時 - 2009-01-26 16:41:29

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

ワークシート関数を範囲指定したセルへ設定すると自動でセルの位置を変えて設定してくれますが、
ワークシート関数を利用して計算結果だけをセルへ設定しているので同じ値が入るのは当然です。
For~Next等で繰り返す必要があります。
---
For i = 2 To endrh - AVHI1
Range("P" & i) = WorksheetFunction.Average(Range("F" & i & ":F" & i + avhi))
Next i

投稿日時 - 2009-01-20 09:42:34

補足

o_chi_chiさん

ありがとうございます。
ほぼ希望通りのものができました。

ただ、一点困っているのは、5日(当日を含む)の平均を求めているのですが、どうも数値が違うようなのです、色々と何が違うのかを見ていますが、皆目原因がわかりません。
また、小数点第2位まで表示させていますが、なぜか第3位が繰上げされてしまうようです。例)正;210.86 誤:210.87

どうしたものでしょうか。。
折角ほぼ希望通りだったのですが、小さなところで違います。

avhi = AVHI1 + 1
For i = 2 To endrh - AVHI1
Range("P" & i) = WorksheetFunction.Average(Range("F" & i & ":F" & i + AVHI1))
Next i
Range("G1").Select

投稿日時 - 2009-01-23 01:41:09

ANo.2

WorksheetFunction.Average(Range("F2:F " & avhi & ""))
の範囲指定を変えればよいということでしょうか?
書き方を変えると以下のようになります。
WorksheetFunction.Average(Range(Cells(2,6),Cells(avhi,6))
書式はRange(開始セル,終了セル)となります。
Cells(行番号,列番号)です。

投稿日時 - 2009-01-20 09:12:10

ANo.1

でしょう。
だから、
http://okwave.jp/qa4638914.html
でいったでしょう。
あなたの言う可変で平均を求めるようにはできますが、繰り返し計算になって、一つずつ計算してセルに入れるから、時間がかかってダメだと。
ワークシート関数は早いけど、数多くやったらやはり時間がかかりますよ。65000もやって御覧なさい。なかなか返ってこないから。

http://okwave.jp/qa4638914.html
で私が言ったようにするのが実用的です。

投稿日時 - 2009-01-20 09:09:50

あなたにオススメの質問