エクセルVBAで表の最終行に集計行を付け足す

エクセルで表の最終行に集計行を付け足す場合、ショートカットキー”Alt+Shift+="を使うと簡単に集計行が追加できるが、例えば、データベースからエクセルブックに取り込んだデータが数十件や数百件のシートとなると
データを取り込む処理もマクロにし、集計もマクロにしないと面倒。

ちょっと調べてみたところ、数値以外の列にも集計行が追加されてもいいならかなりシンプルにできることがわかった。


表中にカーソルがあり、文字が入力されている列(B,C,D列)にも
集計行が付け足されてもいいならコーディングは5行で終わり。


集計される行には、フィールド名も含まれ、集計不要な列にも集計行が
入ってしまうが、フィールド名が数値でなければ実害はなさそう。


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


Offsetで右に3列ずらし、下に1行ずらし、Resizeで3列減らし、1行減らした。
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以外にもいくつか使えそうだ。

MIN関数で試した結果の上の通り。

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

いいなと思ったら応援しよう!

KJ N
よろしければ応援お願いします。頂いたチップはクリエイターとしての活動費に使わせて頂きます。