この記事ではVBAでテーブル(ListObject)を操作するための第一歩として、ListObjectを取得する方法を紹介します。
Excel VBAでは、テーブルを扱うには必ず「ListObject」というオブジェクトを取得する必要があります。ListObjectを取得できれば、列や行を自在に操作したり、データ範囲を取得したりすることが可能になります。
ここでは、代表的な2つの方法を解説します。
1. 名前で取得する方法
テーブルには必ず「テーブル名(Name)」が付いています。Excelでテーブルを作成した際、自動的に「Table1」「Table2」といった名前が付与されますが、管理しやすいように「売上表」「商品一覧」といった意味のある名前に変更しておくのがおすすめです。
構文:
Dim lo As ListObject
Set lo = ThisWorkbook.Sheets("Sheet1").ListObjects("売上表")
Sheets("Sheet1")
→ テーブルが存在するシートを指定ListObjects("売上表")
→ シート内のテーブルを名前で指定
ポイント:
- 同じシート内に複数のテーブルが存在する場合でも、名前を使えば確実に対象を取得できる
- テーブル名は Excel の「テーブルデザイン」タブ → 左上の「テーブル名」から確認・変更可能
2. セル位置から取得する方法
もう一つの方法は、「あるセルがテーブルの中にあるかどうか」を基準にListObjectを取得する方法です。
構文:
Dim lo As ListObject
Set lo = ThisWorkbook.Sheets("Sheet1").Range("B3").ListObject
Range("B3")
→ セルを指定.ListObject
→ そのセルが含まれているテーブルを取得
もし B3
がテーブル内にあれば、そのテーブルの ListObject
が返されます。テーブル外のセルを指定するとエラーになるため注意が必要です。
応用例:アクティブセルからテーブルを取得
Dim lo As ListObject
Set lo = ActiveCell.ListObject 'アクティブセルが含まれるテーブルを取得
この方法を使えば、ユーザーが選択している位置に応じて自動で対象のテーブルを特定できるので、汎用性の高い処理が可能です。
3. 名前取得とセル位置取得の使い分け
方法 | メリット | デメリット | 適した場面 |
---|---|---|---|
名前で取得 | 確実に特定できる | 名前が分からないと使えない | 特定のテーブルを操作するマクロ |
セル位置で取得 | ユーザー操作に柔軟に対応できる | 範囲外セルだとエラーになる | 汎用ツール・選択セルに応じた処理 |
4. まとめ
- ListObjectの取得はVBAでテーブルを操作する第一歩
- 方法は「テーブル名で取得」と「セル位置から取得」の2種類
- 名前で取得 → 固定的に確実に扱える
- セル位置で取得 → 動的に、ユーザー操作に応じた処理が可能
コメント