テーブル機能の備忘録 ② テーブルの範囲指定(2)
先日から、マクロによるテーブル機能の扱いを纏めている(備忘録)。
infoment.hatenablog.com
今日も、昨日の続きから。
テーブルでデータを記載する↓「ボディ」部。
昨日の繰り返しになるが、例えばこのように選択できる。
Sub Test() Dim Tb As Excel.ListObject Set Tb = ActiveSheet.ListObjects(1) Tb.DataBodyRange.Select End Sub
通常のRangeと同様、こちらもループ処理が可能だ。
Sub Test() Dim Tb As Excel.ListObject Set Tb = ActiveSheet.ListObjects(1) Dim r As Range Dim i As Long: i = 1 For Each r In Tb.DataBodyRange r.Value = i i = i + 1 Next End Sub
試しに、各セルに「何番目の処理か」を入力してみた。ループの際は、
列方向が優先されるようだ。
シートがRow(行)がたくさん集まったもの(Application.Rowsプロパティ)であるように、DataBodyRangeもまた、ListRowオブジェクトがたくさん集まったもの(ListRowsコレクション)として扱うことが出来る。
ここで注意が必要なのが、例えばListRows(1)だけでは範囲にならないということ。一行目の範囲を示す場合、ListRowオブジェクトのメンバーであるRangeプロパティまで記載する。
従って、テーブルのデータ範囲の一行目の最初のセルを指定するなら、こうなる。
Sub Test() Dim Tb As Excel.ListObject Set Tb = ActiveSheet.ListObjects(1) ' 以下、3通りを例示。どれでも可。 Tb.ListRows(1).Range.Range("A1").Select Tb.ListRows(1).Range.Cells(1, 1).Select ' 一行しかないので、.Cells(1)という表記が可能。 Tb.ListRows(1).Range.Cells(1).Select End Sub
次回も、ListRowオブジェクトについてご紹介。
明日に続きます。
参考まで。