|
前提が違っているかも知れないが、使えるなら使ってみてください。
Sub test()
Dim rng As Range
Dim a As Range
Dim rng1 As Range
Dim lastRow As Long
Set rng1 = Range("A1").End(xlDown).Offset(3)
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
Set rng = Range(rng1, Cells(lastRow, 1)) _
.Offset(0, 2).SpecialCells(xlCellTypeConstants)
For Each a In rng.Areas
With a
.Cells(1).Offset(.Rows.Count).Value = WorksheetFunction.Sum(.Cells)
End With
Next
End Sub
Sub test2()
Dim rng As Range
Dim lastRow As Long
Dim k As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
Set rng = Range("A1", Cells(lastRow, 1)) _
.Offset(0, 2).SpecialCells(xlCellTypeConstants)
For k = 2 To rng.Areas.Count
With rng.Areas(k)
.Cells(1).Offset(.Rows.Count).Formula = _
"=Sum(" & .Cells.Address(False, False) & ")"
End With
Next
End Sub
レイアウトの提示がなかったのは残念。
以下のような疑問が生じないように求めたものだが、
人の言うことに耳を貸さない方のようです。
・A列には店舗名が重複して入力されているものと仮定
・一行目だけのデータではないものと仮定(Set rng1 = Range("A1").End(xlDown).Offset(3)が不適当の懼れ)
・A店舗だけされている「品目集計」の意味が説明されなかった。
そもそも、特別なことがなぜ最初のA店舗にだけ発生しているのか。
汎用性を持たせる必要はないのか。
アドホックな対応をするなら、コード対応ではなく、ワークシートを直せばよいのではないか。
もし手作業でSUM関数を使った計算式がA店舗の合計値セルに埋められているなら、
A店舗を特別視する必要はないはず。提示のロジックで対応可能だったはず。
なお、結果数値を書き込む方式だと、データの一部変更などがあって
処理をやりなおす必要がもし出てきた場合には、再処理ができない。
結果が定数値とみなされて計算結果が変わってくる。
だから、式を埋め込んだ方がよいかもしれない。
なお、前のスレッドであったマナさんの助言にもトライされたほうがよいと
思います。
|
|