見出し画像

エクセルVBAでクラスモジュールを使う  【第4回】VBAで相対参照の四則演算式を指定列に入れる

相対参照の計算式を複数行に自動で設定できると結構便利なので試してみました。例えば、
① D列に=F列 - H列の数式を組み込むケース
② E列に=F列 - G列の数式を組み込むケース

作成したプロシージャの使い方としては、
① Call 汎用.Col_A_equal_B_calc_C("MainSheet", "D2", "F2", "-", "H2")
シート名"MainSheet"の2行目から始まるデータを対象範囲として、
D列に、 =F列 - H列の式を組み込む(第4引数が四則演算子)
② Call 汎用.Col_A_equal_B_calc_C("MainSheet", "E2", "F2", "-", "G2")
シート名"MainSheet"の2行目から始まるデータを対象範囲として、
E列に、 =F列 - G列の式を組み込む(第4引数が四則演算子)
※対象範囲の最下行はプロシージャが探して設定してくれます。


【改良後】A = B + ( - * / ) Cという四則演算の式を複数行の範囲に設定する
(例:A2~A10に、B列 - C列の式を設定する(B列、C列のセルは相対参照)
【改良前】相対参照で数式をコピーできるように工夫していたもの。
この時は演算子も"-"(マイナス)に限定していて、減算のみ対応。結局は
【改良後】のように単純に数式にセル名を取り込むことで相対参照の式を
組み込むことができると判明し、ついでに演算子も四則に改良した。

RowNoBottom_Main = 汎用.Ck_EndxlDown0_F(WS, Cell_C)の
汎用.Ck_EndxlDown0_F(WS, Cell_C)は、対象範囲の最終行を取り出す別のプロシージャを呼び出して、結果をRowNoBottom_Mainに代入しています。

FormulaToSet = Cell_A & ":" & Split(Range(Cell_A).Address, "$")(1) & RowNoBottom_MainのSplit(Range(Cell_A).Address, "$")(1)は第2引数で入力したセル名からSplit関数で$を区切り文字にして列名のアルファベットを取り出しています。

対象範囲の最終行を取り出す処理(WSはシート名、CellNameはセル名。
第2引数のセル名が、対象範囲の最終行であれば、Offset(1,0)がブランクに
なるので、ブランクなら第2引数自身が最終行とみなし、ブランクでないなら
最終行を.End(xlDown).Rowで取得。                  

やり方はいろいろありそうですが、上記の【改良前】と【改良後】では、【改良後】の方がかなりわかり易くなりました。


この記事が気に入ったらサポートをしてみませんか?