電子書籍の厳選無料作品が豊富!

VBAについての質問です。 こちらの売上累計と移動年計を繰り返し文を用いて出すにはどのようなプログラムを書けば良いでしょうか。 ご回答お願いします。

「VBAについての質問です。 こちらの売上」の質問画像

A 回答 (3件)

<移動年計に関して推定する仕様>


1933年の1月から1944年12月までの合計を、”移動年計”列の12月の行に入力し、次に1933年の2月から1944年1月までの合計を、”移動年計”列の1月の行に入力する。同様に最終行の11月まで繰り返す

1933年はB列
1944年はC列
移動年計はE列

<累計に関して推定する仕様>
不明

<移動年計のコード>
Option Explicit
'*********************************
' 移動年計 メイン
'*********************************
Public Sub sample()

'集計対象範囲  ”1933年”と”1944年”
'集計結果入力範囲 ”移動年計” の列
annualTotal Range("B2:C13"), Range("E2:E13")

End Sub
'*********************************
' 移動年計
' 引数: 集計対象範囲, 集計結果入力範囲
' 備考: 集計対象範囲は2列以上、
' 集計結果入力範囲は1列以上
'*********************************
Public Sub annualTotal(srcRng As Range, destRng As Range)

'集計対象範囲を一時的に配列に入れる
Dim v: v = srcRng

'集計対象範囲の値を入れる配列を用意する
ReDim src(UBound(v, 1) * UBound(v, 2) - 1)

'集計対象範囲の値を配列に入れる
Dim c As Long, r As Long, i As Long
For c = LBound(v, 2) To UBound(v, 2)
For r = LBound(v, 1) To UBound(v, 1)
src(i) = v(r, c)
i = i + 1
Next
Next

'集計結果を入れる配列
ReDim totalArr(0) As Long

'集計の開始位置をひとつずつ後ろに
'ずらしながら繰り返す
For i = 1 To UBound(src)
Dim j As Long, total As Long
'12ヶ月分繰り返す
For j = i To i + 11
'12ヶ月
If i + 11 > UBound(src) Then GoTo label1
'足す
total = total + src(j)
Next j
'集計結果を入れる配列の要素をひとつ増やす
ReDim Preserve totalArr(UBound(totalArr) + 1)
'集計結果を配列に入れる
totalArr(UBound(totalArr)) = total
total = 0
Next i

label1:

'集計結果入力範囲に集計結果を入れていく
i = 1
'列の数だけ繰り返す
For c = 1 To destRng.Columns.Count
'行の数だけ繰り返す
For r = 1 To destRng.Rows.Count
'行、列を指定して集計結果を入力する
destRng.Item(r, c) = totalArr(i)
i = i + 1
If i > UBound(totalArr) Then Exit Sub
Next
Next

End Sub
    • good
    • 1
この回答へのお礼

助かりました

ありがとうございます

お礼日時:2020/11/22 12:30

言ってることがよくわかりません

    • good
    • 0

1.セルの位置が判らないと、マクロは組めません。


1933年の文字があるセルの位置はどうなってますか。(B1であってますか)
2.売上累計はどのように計算するのですか。例として12月、1月には、どのような値が入れば良いのでしょうか?
3.移動年計はどのように計算するのですか。例として12月、1月には、どのような値が入れば良いのでしょうか?
    • good
    • 5

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!