メインのVBAコード
Sub 月次移動平均計算()
Const c_開始月 = 7
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim 月順(11) As String
Dim i As Long
Dim 前月数量 As Long
Dim 前月金額 As Double
Dim 仕入数量 As Long
Dim 仕入金額 As Double
Dim 払出数量 As Long
Dim 払出金額 As Double
'ループ処理したいので月の並びを配列に確保'
For i = 0 To 11
月順(i) = (c_開始月 + i - 1) Mod 12 + 1 & "月"
Next
'--(ここまで)--'
Set db = CurrentDb
'下処理クエリ実行'
db.Execute "Q月次移動平均表Clear"
db.Execute "Q月次移動平均基礎データ作成"
'--(ここまで)--'
Set rs = db.OpenRecordset("T月次移動平均表")
Do Until rs.EOF
rs.Edit
'移動平均計算'
前月数量 = Nz(rs!期首数量, 0)
前月金額 = Nz(rs!期首金額, 0)
For i = 0 To 11
仕入金額 = Nz(rs(月順(i) & "仕入金額"), 0)
仕入数量 = Nz(rs(月順(i) & "仕入数量"), 0)
払出数量 = Nz(rs(月順(i) & "売上数量"), 0)
If 前月数量 + 仕入数量 = 0 Then
払出金額 = 0
Else
払出金額 = (前月金額 + 仕入金額) / (前月数量 + 仕入数量) * 払出数量
End If
前月金額 = 前月数量 + 仕入金額 - 払出金額
rs(月順(i) & "払出金額") = 払出金額
rs(月順(i) & "金額") = 前月金額
前月数量 = Nz(rs(月順(i) & "数量"), 0)
Next
'--(ここまで)--'
rs.Update
rs.MoveNext
Loop
rs.Close
db.Close
Set rs = Nothing
Set db = Nothing
End Sub
変数の型(平均計算で小数点以下がでる)のと/ (前月数量 + 仕入数量)
があるのでそこの条件判断をしてあげないといけないかなぁという感じ
計算部分はちょっと自信ないので出力結果が正しいかは十分にテストしてください
テーブル、クエリ、VBAと使うものが多いのでフィールド名を変えたりする場合はよく見てください
ワークテーブルを使う方法は実行する度にACCESSファイルが肥大化するので適宜、最適化が必要になると思います。大本のデータとはファイルを分けてリンクテーブルで拾うようにするといいかな?
いろいろ手間な部分もあるのでhatenaさんの方法でうまくいけばそれでいいんじゃないかな。とも
通報 ...