ITサポーターTsuchida

VBA Advance9

第9章 数式の保存

毎月の入力するシートの繰越処理を行う際に自動的に数式を入れたいことがあります。

数式が入るセルの相対位置が決まっている場合は、相対位置を指定すれば数式が入ります。

例.数式が入るセルをC1セルとし、A1セルとB1セルの合計を求める

Cells(1, 3).Formula = "=RC[-2]+RC[-1]"(四則演算の場合)
Cells(1, 3).Formula = "=sum(RC[-2]:RC[-1])"(sum関数の場合)

ところが、行の挿入や削除によって数式の行が変動するため、セルに数式を埋め込もうとすると意外と頭を悩まします。セル範囲が変わるような場合は、変数でセル位置を記憶させます。

例えば、A列に数式の開始行を変数iに保存して、終了行を変数jに保存してあるとします。最終行の1行下に範囲の合計を求めるsum関数をセットする場合は以下のようになります。

Cells(j, 1).Offset(1, 0).Formula = "=sum(" & Range(Cells(i, 1),Cells(j, 1)).Address(False, False) & ")"

※AddressプロパティのFalseはセル参照を相対参照を意味し、省略したりTrueにすると絶対参照になります。今回はFalse,Falseなので行も列もセル参照は相対参照ということになります。

今回は単純な四則演算とsum関数の埋め込みでしたが、Excelのワークシート関数はセル参照ができればすべて同様に組み込めます。