テーブルにレコードを追加するときの注意点 ② 集計行がある場合
Excelのテーブル機能について、昨日は表のすぐ下にレコードを追加すると、表が自動的に拡張されることを確認した。
infoment.hatenablog.com
しかしこの方法は、例えば「集計行」がある場合は役に立たない。今日は、これについて確認する。
Excelにおいて、テーブルとして書式設定された表は、
・ListObject
というオブジェクトになる。このオブジェクトへのレコード追加には、Addメソッドを用いる。
Sub TableTest() Dim Tb As ListObject Set Tb = ActiveSheet.ListObjects(1) Tb.ListRows.Add End Sub
このとおり最終レコードである「みかん」と集計行の間に、一行追加されている。
私も先日、社内の勉強会で教わった口なのだが、この追加したListRowsは変数で受け取ることが出来る。こんな感じだ。
Sub TableTest() Dim Tb As ListObject Set Tb = ActiveSheet.ListObjects(1) Dim AddedRow As ListRow Set AddedRow = Tb.ListRows.Add End Sub
従って、これに昨日の配列を充て込むことで、集計行があってもレコードの追加が可能となる。
ちなみに、これだとエラーになる。
Sub TableTest() Dim Tb As ListObject Set Tb = ActiveSheet.ListObjects(1) Dim AddedRow As ListRow Set AddedRow = Tb.ListRows.Add AddedRow = Array("ばなな", 300, "フィリピン") End Sub
なぜなら、ListRowオブジェクトはリストの行そのものであって、行の範囲を表しているわけではないから。この場合、
AddedRow.Range
のように、追加した行の範囲としなければならない。
以上を踏まえると、次のようになる。
Sub TableTest() Dim Tb As ListObject Set Tb = ActiveSheet.ListObjects(1) Dim AddedRow As ListRow Set AddedRow = Tb.ListRows.Add AddedRow.Range = Array("ばなな", 300, "フィリピン") End Sub
昨日のように、テーブルの善意(?)に甘えるよりは少しマシになっただろうか。
もう少しだけ続きます。
参考まで。