エクセルVBAで表の最終行に集計行を付け足す
エクセルで表の最終行に集計行を付け足す場合、ショートカットキー”Alt+Shift+="を使うと簡単に集計行が追加できるが、例えば、データベースからエクセルブックに取り込んだデータが数十件や数百件のシートとなると
データを取り込む処理もマクロにし、集計もマクロにしないと面倒。
ちょっと調べてみたところ、数値以外の列にも集計行が追加されてもいいならかなりシンプルにできることがわかった。

集計行が付け足されてもいいならコーディングは5行で終わり。


入ってしまうが、フィールド名が数値でなければ実害はなさそう。

どうせなら、フィールド名を集計から除いて、数値の列だけに
集計を入れたいので、以下のように工夫してみるとできた。

Set Rng_Data = Rng_Data.Offset(1, ColExcept).Resize(Rng_Data.Rows.Count - 1, Rng_Data.Columns.Count - ColExcept) ※汎用的に使うために変数を使った。
また、ついでにsum関数だけでなく、max、min、averageも使えるようにした。


Auto_Sum0(シート名, セル名, 除外列数, 使用する関数)
シート名は表が入っているシートの名前、セル名は、表中のセルならどこでもOK,除外列数は左からいくつかの列が数値列でない場合、文字の列数を入れる。関数はSUM以外にもいくつか使えそうだ。

このやり方だと、集計方法は1通りしかできないので、列ごとに集計方法を変えることができるプロシージャもいずれ作ってみようと思います。汎用でなく、専用になるかも知れないですね。。。
いいなと思ったら応援しよう!
