|
>日付がB列に表示され、これもエクセルの表を取得する日によって表示されるセルの場所は異なります。
此れが気に成りますが?
善く理解していなくて、上手くいか無いかも?
取り合えず叩き台として
集計対象はActiveSheetとしています
以下を標準モジュールに記述してください
Option Explicit
Public Sub AddUp()
Dim i As Long
Dim j As Long
Dim lngListTop As Long
Dim lngListEnd As Long
Dim vntData As Variant
Dim vntSum(1) As Variant
Dim vntSubSum(1) As Variant
With ActiveSheet
'仮に先頭行を設定
lngListTop = 1
'もし、先頭行B列が""なら
If .Cells(lngListTop, "B").Value = "" Then
'先頭行を取得
lngListTop = .Cells(lngListTop, "B").End(xlDown).Row
End If
'最終行を取得
lngListEnd = .Cells(65536, "D").End(xlUp).Row + 1
'先頭行から最終行まで繰り返し
For i = lngListTop To lngListEnd
'現在行のB、C、D列の値を取得
vntData = .Cells(i, "B").Resize(, 3).Value
'もし、B列が""でD列が""なら(日付の終り)
If vntData(1, 1) = "" And vntData(1, 3) = "" Then
'小計を出力
.Cells(i, "C").Resize(, 2).Value = vntSubSum
'小計を計に加算
For j = 0 To 1
vntSum(j) = vntSum(j) + vntSubSum(j)
Next j
Else
'もし、B列が""で無いなら(日付が有る場合)
If vntData(1, 1) <> "" Then
'小計をクリア
For j = 0 To 1
vntSubSum(j) = 0
Next j
Else
'小計にD列値、及びカウントを加算
vntSubSum(0) = vntSubSum(0) + 1
vntSubSum(1) = vntSubSum(1) + vntData(1, 3)
End If
End If
Next i
'計を出力
.Cells(i, "C").Resize(, 2).Value = vntSum
End With
Beep
MsgBox "処理完了"
End Sub
|
|