「databodyrange 列選択」
という検索キーワードでのアクセスに気が付きました。
ListObjectオブジェクト内の、(見出し行と集計行を除いた)データ部分を表すDataBodyRangeの、列を選択するコードを探していらしたのでしょうか。
DataBodyRangeの列を確認するマクロ
以下のSubプロシージャが参考になるはずです。
With ActiveSheet.ListObjects(1).DataBodyRange.Columns(1)
.Select
MsgBox .Address(False, False)
End With
End Sub
アクティブなワークシートにテーブルを作成しておいてから、上記のSubプロシージャを実行してください。
アクティブシートの、
With ActiveSheet.ListObjects(1).DataBodyRange.Columns(1)
1つ目のテーブルの、
With ActiveSheet.ListObjects(1).DataBodyRange.Columns(1)
データ部分の、
With ActiveSheet.ListObjects(1).DataBodyRange.Columns(1)
1列目が、
With ActiveSheet.ListObjects(1).DataBodyRange.Columns(1)
選択されて、
.Select
そのセル番地がメッセージボックスに表示されます。
MsgBox .Address(False, False)
もちろん「With ActiveSheet.ListObjects(1).DataBodyRange.Columns(2)」とすれば、2列目が選択され、そのセル番地がメッセージボックスに表示されます。
DataBodyRangeのColumnを取得するコード
オブジェクトブラウザーで確認できるとおり、テーブルを表すListObjectオブジェクトが持つDataBodyRangeプロパティは、テーブルのデータ部分のみを表すRangeオブジェクトを返します。
Rangeオブジェクトが持つColumnsプロパティを使えば、
セル範囲のすべての列を表すRangeオブジェクトが取得できるので、その既定プロパティに「1」を指定して1列目を取得しています。
列のDataBodyRangeを確認するサンプルマクロ
「DataBodyRangeの列」を取得するというコードをご紹介しましたが、実は「列のDataBodyRange」を取得するという考え方でもコードを書けます。
With ActiveSheet.ListObjects(1).ListColumns(1).DataBodyRange
.Select
MsgBox .Address(False, False)
End With
End Sub
先にご紹介した「DataBodyRangeの列」の場合は
With ActiveSheet.ListObjects(1).DataBodyRange.Columns(1)
と、先にテーブルのデータ部分のみを表すRangeオブジェクトを取得してから、列を取得していました。
これに対して、「列のDataBodyRange」を取得する考え方の場合は、列を取得してからデータ部分です。
ListColumnsプロパティとListColumnsコレクションの既定プロパティでテーブルの列を表すListColumnオブジェクトを取得しておいてから、
With ActiveSheet.ListObjects(1).ListColumns(1).DataBodyRange
ListColumnオブジェクトに用意されているDataBodyRangeプロパティで、
With ActiveSheet.ListObjects(1).ListColumns(1).DataBodyRange
列のデータ部分だけを取得しています。
Home » エクセルマクロ・Excel VBAの使い方 » ListObjectオブジェクト » DataBodyRangeの列を取得・選択する