この記事では、取得した ListObject を使って テーブルの列名・行数・範囲を調べる方法 を紹介します。
Excel VBAでテーブルを操作するとき、「どの列があるか」「データが何行あるか」「どのセル範囲を使っているか」を正しく把握することはとても重要です。これを押さえておくことで、動的にデータを処理できるようになります。
1. 列名を取得する
テーブルの列は ListColumns
というコレクションで管理されています。各列には 名前(Name) が付いているため、コードで簡単に取得できます。
例:テーブルのすべての列名を取得して表示
商品名 | 単価 | 数量 | 売上 |
---|---|---|---|
りんご | 100 | 3 | 300 |
バナナ | 120 | 2 | 240 |
Sub GetColumnNames()
Dim lo As ListObject
Dim lc As ListColumn
'テーブルを名前で取得
Set lo = ThisWorkbook.Sheets("Sheet1").ListObjects("売上表")
'各列の名前を取得して出力
For Each lc In lo.ListColumns
Debug.Print lc.Name '列名を表示
Next lc
End Sub
実行すると、イミディエイトウィンドウに「商品名」「単価」「数量」「売上」といった列名が出力されます。
👉 列を番号で参照することも可能です。
Debug.Print lo.ListColumns(1).Name '1列目の列名を取得
2. 行数を取得する
テーブルのデータ行は ListRows.Count
で数えることができます。
Sub GetRowCount()
Dim lo As ListObject
Set lo = ThisWorkbook.Sheets("Sheet1").ListObjects("売上表")
Debug.Print lo.ListRows.Count 'データ行数を表示
End Sub
例えば、5件のデータがあれば「5」と表示されます。
※ここで数えられるのは「データ部分の行数」であり、ヘッダーは含まれません。
3. テーブル全体の範囲を取得する
テーブルのセル範囲は Range
プロパティで取得できます。
Sub GetTableRange()
Dim lo As ListObject
Set lo = ThisWorkbook.Sheets("Sheet1").ListObjects("売上表")
Debug.Print lo.Range.Address 'テーブル全体のセル範囲を表示
End Sub
例えば $A$1:$D$6(A1:D6)
のように、ヘッダーを含めた範囲が取得されます。
4. ヘッダー部分とデータ部分の範囲を取得する
テーブルは「ヘッダー」と「データ部分」が明確に分かれています。
- ヘッダー部分 →
lo.HeaderRowRange
- データ部分 →
lo.DataBodyRange
例:
Sub GetTableParts()
Dim lo As ListObject
Set lo = ThisWorkbook.Sheets("Sheet1").ListObjects("売上表")
Debug.Print lo.HeaderRowRange.Address 'ヘッダー行の範囲
Debug.Print lo.DataBodyRange.Address 'データ部分の範囲
End Sub
5. サマリー(合計行)の範囲を取得
もしテーブルに「集計行(合計行)」が設定されている場合は、lo.TotalsRowRange
で取得できます。
Debug.Print lo.TotalsRowRange.Address '合計行の範囲を取得
6. まとめ
- 列名の取得 →
ListColumns
- 行数の取得 →
ListRows.Count
- 範囲の取得 →
Range
(全体)、HeaderRowRange
(ヘッダー)、DataBodyRange
(データ部分)、TotalsRowRange
(合計行)
これらを活用することで、テーブルの構造を正確に把握でき、動的に処理するプログラムが書けるようになります。
コメント