スポンサーリンク

【VBA】テーブルの列名・行数・範囲を取得する基本構文

この記事では、取得した ListObject を使って テーブルの列名・行数・範囲を調べる方法 を紹介します。

Excel VBAでテーブルを操作するとき、「どの列があるか」「データが何行あるか」「どのセル範囲を使っているか」を正しく把握することはとても重要です。これを押さえておくことで、動的にデータを処理できるようになります。


スポンサーリンク

1. 列名を取得する

テーブルの列は ListColumns というコレクションで管理されています。各列には 名前(Name) が付いているため、コードで簡単に取得できます。

例:テーブルのすべての列名を取得して表示

商品名単価数量売上
りんご1003300
バナナ1202240
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(合計行)

これらを活用することで、テーブルの構造を正確に把握でき、動的に処理するプログラムが書けるようになります。

コメント

タイトルとURLをコピーしました