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

解決済みの質問

エクセルVBAで平均を求める

こんにちわ。
エクセルVBA初心者です。

質問1
VBAで平均を求めているのですが、セルに関数が入ってしまいます。
これを入らずに計算できるようにするには、どのようにすればよい
でしょうか。

質問2
また、現状10000行まで計算できるようにしておりますが、本当は、
エクセルの限界まで(確か6万・・・行だったと思いますが)したい
のですが、どうすればよいでしょうか。

【補足】
P、Q列に夫々、F列の5つ平均(P)、25つ平均(25)を表示させるVBEで作成しています。
ただ、P,Q列を見ていただけるとAverage関数が入っています。
できれば、これを入らないようにしたいのです。

【対象となっているコード】
※ Module2に記載しています。

Const AVHI1 As Integer = 5 '移動平均日数1 可変にしなければ
Const AVHI2 As Integer = 25 '移動平均日数2 可変にしなければ

Sub 移動平均()

Dim endrh As Integer '最終セル

Application.ScreenUpdating = False
Worksheets("date").Select

'セル表示形式
Columns("P").Select
Selection.NumberFormatLocal = "0.0_ "
Columns("Q").Select
Selection.NumberFormatLocal = "0.0_ "
Range("G1").Select

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

'データチェック
If endrh - AVHI2 < 4 Then
MsgBox "移動平均" & AVHI2 & "日分のデータ不足で計算できません"
Exit Sub
End If

'AVHI1(5日)の終値平均 ------------------------------------------
avhi = AVHI1 + 1
Range(Cells(2, 16), Cells(endrh - AVHI1, 16)).Formula = _
"=AVERAGE(F2:F" & avhi & ")" 'ここをVBAに調整
Range("G1").Select

'AVHI1(25日)の終値平均 ------------------------------------------
avhi = AVHI2 + 1
Range(Cells(2, 17), Cells(endrh - AVHI2, 17)).Formula = _
"=AVERAGE(F2:F" & avhi & ")" 'ここをVBAに調整
Range("G1").Select

Cells(1, 16) = AVHI1 & "_SMA"
Cells(1, 17) = AVHI2 & "_SMA"
Range("G1").Select

End Sub

投稿日時 - 2009-01-18 00:49:47

QNo.4638914

すぐに回答ほしいです

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

Range(Cells(2, 17), Cells(endrh - AVHI2, 17)).Value = WorksheetFunction.AVERAGE(Cells(1,1),Cells(1,1))
のようにエクセル関数をVBAから使用することができます。
割と早いのでお勧めです。

投稿日時 - 2009-01-19 08:52:13

補足

有難う御座います。
この方法試してみます。

※ ちなみに、エクセルが見られるURLを添付していましたが、OKWave側に削除されてしまいました。

投稿日時 - 2009-01-19 09:41:11

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

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

回答(2)

ANo.1

どこかからコピーしてきたものか。
1.
1行ずつ計算してセルに入れれば数式は入らないが、行数が多いと時間がかかる。数式がいやなら
数式の入っている範囲をコピー/値で貼り付ける方が時間がかからなくていいだろう。
Range(Cells(2, 16), Cells(endrh - AVHI1, 16)).Formula = _
"=AVERAGE(F2:F" & avhi & ")" 'ここをVBAに調整
Range(Cells(2, 16), Cells(endrh - AVHI1, 16)).Copy
Cells(2,6).PasteSpecial Paste:=xlValues

2.
'最終セル
Cells(10000, 1).End(xlUp).Select

Cells(65536, 1).End(xlUp).Select

投稿日時 - 2009-01-18 02:03:07

あなたにオススメの質問