前回はExcel VBAエキスパートスタンダードのTable内の行と列の取得について勉強しました。
前回までの記事はこちら
今回は7章のTableの操作の続きについてレポートしていきます。今回で3回目です。
なお理解が間違っているところもあるかもしれませんがわからない人と同じ視点に立てるのは今しかないので細かいところはご容赦ください。
間違えに気づいたら修正していきます(笑)。
<今回の目的>
Table内の削除と追加について理解する
-
8章を精読する
-
Table内の削除と追加をわかりやすく説明する
結論
いきなりですが結論です。
テーブル、行、列の削除はそれぞれのオブジェクトに対してDeleteメソッドを用いる。
行、列の追加はそれぞれのコレクションに対してAddメソッドを用いる
次から詳しく説明します。
今回躓いた部分
追加も削除も対象のオブジェクトに対してAddメソッド、Deleteメソッドを追加すればできると思っていましたが違っていました。指定する範囲が間違っていたので紹介します。
データ、行、列の削除
削除は対象のオブジェクトを選択したうえでDeleteメソッドを使用します。
Sub Sample7()
'テーブル内のデータ範囲の削除
Range("A1").ListObject.DataBodyRange.Delete
'テーブル内の特定行の削除 ListObject.ListRows(インデックス番号).Delete
Range("A1").ListObject.ListRows(3).Delete
Range("A1").ListObject.ListRows(3).Range.Delete
'テーブル内の特定列の削除
Range("A1").ListObject.ListColumns(3).Delete
Range("A1").ListObject.ListColumns(3).Range.Delete
Range("A1").ListObject.ListColumns(3).DataBodyRange.Delete
End Sub
行、列の追加
追加は対象のコレクションを選択したうえで以下Addメソッドと引数を使用します。
Range(“A1”).ListObject.ListRows.Add Position:=n
Sub Sample8()
'テーブル内の特定行への追加
Range("A1").ListObject.ListRows.Add 3
'テーブル内の最終行への追加(引数なし)
Range("A1").ListObject.ListRows.Add
'テーブル内の特定列への追加
Range("A1").ListObject.ListColumns.Add Position:=3
End Sub
DeleteメソッドはオブジェクトでしたがAddメソッドはコレクションに対して行います。
追加した列への数式の追加
追加した列への数式の追加はテーブルへの数式の代入で可能です。
なおテーブルに数式を代入する際は構造化参照を使います(詳しくは次回以降で)
以下はAddメソッドで追加した最終列に対して「合計」列を2倍する数式を代入します。
Sub Sample6()
'追加した列への数式の追加
Range("A1").ListObject.ListColumns.Add
Dim n As Long
n = Range("A1").ListObject.ListColumns.Count
Range("A1").ListObject.ListColumns(n).Range(2) = "=[@合計]*2"
End Sub
ListColumns.Countsで最終列のインデックス番号を取得できます。
その2行目に数式として”=[@列指定子]*2”を入れます。@は同じ行を表します。
ここではすべての列に数式を入れるようにはしていませんがテーブルの構造上1つの行に数式を入れるとすべての行に数式が反映されるので便利です。
ここでのまとめ
削除はそれぞれのオブジェクトに対してDeleteメソッド、追加はコレクションに対してAddメソッドを使います。
すこしややこしいですがそのままの形で覚えることとします。
次回はAutoFilterを用いて特定のデータを操作する方法を学びます。躓いた部分も記載しますので参考にしていただければ幸いです。
コメント