|
重箱の隅をつつくようですが、ちょっと気になったのでコメントします。
ゆみこんさん提示のSpecialcellsメソッドでの引数の使い方ですが、
このメソッドは、
Function SpecialCells(Type As XlCellType, [Value]) As Range
であり、1番目の引数TypeにはxlCellType列挙型の定数を指定します。
ご提示の案では、xlCellTypeConstants(=2)を指定すべきだと思います。
なお、2番目の引数Valueは、1番目で定数や数式を指定した時に、
さらに細かく指定する場合のものです。
なお、xlTextValues(=2)は本来、当メソッドの2番目の引数用の定数だと思います。
たまたまどちらの定数でも値は同じだったので、
得られる結果は同じになるでしょうが、ちょっと不自然に感じたので意見させてもらいました。
ついでに、私もAutoFilterを使った例を書いときます。
Sub tot()
Dim RR As Range, r As Range
Dim sCel As Range, eCel
With ActiveSheet.Range("A1").CurrentRegion.Columns("D")
.Worksheet.AutoFilterMode = False
.AutoFilter 1, "小計"
On Error Resume Next
Set RR = .Resize(.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible)
On Error GoTo 0
.Worksheet.AutoFilterMode = False
Set sCel = .Cells.Item(2).Offset(, 1)
End With
If Not RR Is Nothing Then
' MsgBox RR.Address
For Each r In RR
Set eCel = r.Offset(-1, 1)
'数式でセットしたいなら
r.Offset(, 1).Formula = _
"=SUM(" & Excel.Range(sCel, eCel).Address(0, 0) & ")"
'数式でなく、結果だけがほしいなら
'r.Offset(, 1).Value = WorksheetFunction.Sum(Excel.Range(sCel, eCel))
Set sCel = r.Offset(1, 1)
Next
End If
End Sub
提示のデータ配置がよく分からないので、
・"小計"があるのはD列である。
・小計を取りたい項目はE列である。
としてます。
|
|