|
んーと・・何と説明してよいか・・。
例えば現在、S列の最終入力行が 10 であったとしてます。
このとき、S10 には既に =SUBTOTAL(R1C:R9C) という列の合計をする式が
入っているとします。つまり S1:S9 の範囲は =SUM で始まる数式ですね。
当然、その数式が参照している範囲は、Q1:Q9 と R1:R9 になっているはずです。
そしてあなたが書いたマクロ↓を実行したとき、仮に Q11 まで値が入力されて
いたとすると
Sub MySUM()
Range("Q1", Range("Q65536").End(xlUp)).Offset(, 2) _
.FormulaR1C1 = "=SUM(RC[-3]-RC[-1])"
End Sub
によって、S1:S11 の範囲に =SUM で始まる式が入りますよね ?
そーしたら当然、先にあった S10 の SUBTOTAL の式は上書きされて消えてしまい、
S列の最終入力行は 11 になり、そこには =SUM で始まる式があるのだから
私の提示した Sub MyTotal() を実行すると
IF Left$(.Formula, 4) = "=SUM" Then
の判定は"真"となって、新たな SUBTOTAL の数式を入力できるわけです。
念の為付け加えておくと、もし Q列の最終入力行が 8 に減ってしまったときは、
あなたのマクロを実行した後も、当然 S列には変化がなく、従って Sub MyTotal()
を実行しても何も起きないのです。「常にデータが増えていく」ということを
前提にしているためです。万が一、データが減ることが予想されるなら、あなたの
マクロは
Sub MySUM()
Columns(19).ClearContents
Range("Q1", Range("Q65536").End(xlUp)).Offset(, 2) _
.FormulaR1C1 = "=SUM(RC[-3]-RC[-1])"
End Sub
というように、"いったんS列をクリアしてから" 数式を入力するように、変更しない
といけません。
|
|