|
Sample7は、数式が入っていた場合、Sumの範囲は数式の下の行からと成ります
Public Sub Sample7()
' 全ての数式を除く場合
Dim i As Long
Dim lngCount As Long
Dim vntMark As Variant
'ActiveCellを基準とする
With ActiveCell
'データ行数の初期値を設定
lngCount = 0
'現在のセルより上のデータが数字でなくなるまで繰り返し
i = i - 1
Do Until .Row + i = 0
'操作行が数値無く、若しくはEmpty値ならDoを抜ける
vntMark = .Offset(i).Value
If .Offset(i).HasFormula = False _
And (VarType(vntMark) = vbDouble _
Or VarType(vntMark) = vbLong) Then
'データ行数をカウント
lngCount = lngCount + 1
Else
Exit Do
End If
'操作行を更新
i = i - 1
Loop
'該当行が無い場合
If lngCount > 0 Then
'数式を出力
.FormulaR1C1 = "=Sum(R[-" & (lngCount) & "]C:R[-1]C)"
End If
End With
End Sub
Sample8は、Sum数式が入っていた場合、Sumの範囲はSum数式の下の行からと成ります
ただし、他の数式の場合、数値を返している場合は範囲に含み、
それ以外を返している場合は、その下までと成ります
Public Sub Sample8()
' Sumの数式と数値以外の数式を除く場合
Dim i As Long
Dim lngCount As Long
Dim vntMark As Variant
'ActiveCellを基準とする
With ActiveCell
'データ行数の初期値を設定
lngCount = 0
'現在のセルより上のデータが数字でなくなるまで繰り返し
i = i - 1
Do Until .Row + i = 0
'操作行が数値無く、若しくはEmpty値ならDoを抜ける
vntMark = .Offset(i).Value
If InStr(1, .Offset(i).Formula, "=SUM", vbBinaryCompare) <> 1 _
And (VarType(vntMark) = vbDouble _
Or VarType(vntMark) = vbLong) Then
'データ行数をカウント
lngCount = lngCount + 1
Else
Exit Do
End If
'操作行を更新
i = i - 1
Loop
'該当行が無い場合
If lngCount > 0 Then
'数式を出力
.FormulaR1C1 = "=Sum(R[-" & (lngCount) & "]C:R[-1]C)"
End If
End With
End Sub
|
|