Worksheet ListObject

Worksheet

1. はじめに

Excel VBAにおいて、ListObjectは「Excelのテーブル(リスト形式のデータ)」を表すオブジェクトです。
WorksheetオブジェクトのサブコレクションであるListObjectsは、そのシート上に存在するすべてのテーブルを管理し、個々のListObjectにアクセスできます。

テーブル機能はExcelのデータ管理で非常に重要で、フィルタリングや並べ替え、構造化参照などの強力な機能を持ちます。
VBAからListObjectを操作することで、これらの機能を自動化・拡張できます。


2. ListObjectとは何か?

  • Excelの「テーブル」(Excel2007以降で導入された機能)をVBAで扱うためのオブジェクト。
  • 1つのテーブルはListObjectオブジェクトで表現される。
  • テーブルは見た目だけでなく、行・列の追加、フィルタ、集計など多彩な機能が備わっている。

3. Worksheet.ListObjectsコレクション

  • Worksheetに存在するすべてのテーブルを格納するコレクション。
  • ListObjects.Countでテーブル数を取得可能。
  • インデックス番号または名前で個別のListObjectを取得できる。

例:テーブル数を取得して名前を列挙する

Sub ListObjects一覧表示()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")

Dim lo As ListObject
Dim i As Long

Debug.Print "テーブル数:" & ws.ListObjects.Count
For i = 1 To ws.ListObjects.Count
Debug.Print "テーブル名:" & ws.ListObjects(i).Name
Next i
End Sub

4. ListObjectの主要プロパティ

プロパティ説明
Nameテーブル名(ユニーク)
Rangeテーブル全体のセル範囲(ヘッダー+データ)
DataBodyRangeデータ部分(ヘッダーを除く範囲)のセル範囲
HeaderRowRangeヘッダー行のセル範囲
TotalsRowRange集計行のセル範囲(有効な場合)
ShowTotals集計行の表示/非表示(Boolean)
TableStyleテーブルのスタイル名(例:”TableStyleMedium9″)
ListColumns列のコレクション
ListRows行のコレクション
AutoFilterテーブルのオートフィルタオブジェクト

5. ListObjectの主なメソッド

メソッド説明
Add新しいテーブルを作成(ListObjects.AddWorksheetのメソッド)
Deleteテーブルを削除(テーブルとしての形式を解除)
Resizeテーブルの範囲を拡張・縮小
Refresh外部データソースのテーブル更新
Unlistテーブルを解除(ただの範囲に戻す)

6. テーブルの新規作成

Worksheet.ListObjects.Addメソッドを使って新しいテーブルを作成できます。

例:セル範囲をテーブル化

Sub 新規テーブル作成()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")

Dim tbl As ListObject
Set tbl = ws.ListObjects.Add(xlSrcRange, ws.Range("A1:D10"), , xlYes)

tbl.Name = "MyTable"
tbl.TableStyle = "TableStyleMedium9"
End Sub
  • xlSrcRangeは範囲指定によるテーブル作成。
  • 最後の引数xlYesは「範囲の最初の行をヘッダーとして使う」ことを意味します。

7. テーブルの行・列操作

7-1. 行の追加

Sub テーブルに行追加()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")

Dim tbl As ListObject
Set tbl = ws.ListObjects("MyTable")

tbl.ListRows.Add
tbl.ListRows(tbl.ListRows.Count).Range(1, 1).Value = "新規データ"
End Sub
  • ListRows.Addで末尾に新しい行を追加。
  • 追加した行のセルに値を入力できる。

7-2. 列の追加

Sub テーブルに列追加()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")

Dim tbl As ListObject
Set tbl = ws.ListObjects("MyTable")

tbl.ListColumns.Add
tbl.ListColumns(tbl.ListColumns.Count).Name = "新規列"
End Sub

8. フィルター操作

テーブルは自動的にオートフィルタが設定されており、VBAでフィルターを操作可能。

Sub フィルター適用例()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")

Dim tbl As ListObject
Set tbl = ws.ListObjects("MyTable")

' 1列目で「東京都」だけ表示
tbl.Range.AutoFilter Field:=1, Criteria1:="東京都"
End Sub

9. テーブルのスタイル変更

Sub スタイル変更()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")

Dim tbl As ListObject
Set tbl = ws.ListObjects("MyTable")

tbl.TableStyle = "TableStyleLight11"
End Sub
  • Excel標準のテーブルスタイル名を設定することで見た目を変更できる。

10. その他便利なポイント

10-1. DataBodyRangeの扱い

  • 空のテーブルの場合、DataBodyRangeNothingになることがあるため、扱う際には存在チェックを入れるのが安全。
If Not tbl.DataBodyRange Is Nothing Then
MsgBox "データ行数: " & tbl.DataBodyRange.Rows.Count
Else
MsgBox "データ行がありません"
End If

10-2. TotalsRowの活用

  • 集計行を表示して合計や平均などを自動計算可能。
tbl.ShowTotals = True
tbl.ListColumns(2).TotalsCalculation = xlTotalsCalculationSum

11. サンプルコードまとめ

Sub ListObject操作まとめ()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Sheet1")

' 新規テーブル作成
Dim tbl As ListObject
Set tbl = ws.ListObjects.Add(xlSrcRange, ws.Range("A1:C5"), , xlYes)
tbl.Name = "SampleTable"
tbl.TableStyle = "TableStyleMedium2"

' 行追加
tbl.ListRows.Add
tbl.ListRows(tbl.ListRows.Count).Range(1, 1).Value = "追加行"

' フィルター設定
tbl.Range.AutoFilter Field:=1, Criteria1:="特定の値"

' 集計行表示
tbl.ShowTotals = True
tbl.ListColumns(2).TotalsCalculation = xlTotalsCalculationAverage
End Sub

12. まとめ

項目内容
ListObjectExcelのテーブルを表すオブジェクト
Worksheet.ListObjectsシート上のテーブルコレクション
主な機能テーブル作成、行列追加、フィルター設定、集計表示、スタイル変更
使いどころデータベース的なデータ管理、自動集計、ユーザー入力補助
注意点DataBodyRange の存在チェック、名前の重複に注意
タイトルとURLをコピーしました