このページの内容について
このページは、VBAエキスパート(ExcelVBAスタンダード)試験合格講座の第十二回記事です。公式テキスト第8章「テーブルの操作」の内容について解説します。自分でも手を動かしながら読み進めてください。主に講座受講者の復習での利用を想定しています。
テーブル(ListObjectオブジェクト)
Excelは表のデータをデータベースのようにして扱うことができる「テーブル」という機能があります。テーブルの操作には「ListObject」というオブジェクトを使用します。

テーブルを特定する方法
テーブルを操作するためのListObjectオブジェクトを取得する方法はいくつか存在します。
Rangeのプロパティ
テーブルに含まれるセルの一つからListObjectオブジェクトを取得する方法です。
サンプルコード(クリックでコピー)
Private Sub Test_GetListObjectByRange()
Dim ws As Worksheet
Dim rng As Range
Dim list As ListObject
Set ws = ThisWorkbook.Worksheets(1)
Set rng = ws.Range("A1")
Set list = rng.ListObject
Debug.Print list.Name
End Sub
実行結果
上記サンプルコードは、マクロが動作中のブックの一番左のシートにセル「A1」を含むテーブルがあると、テーブルの名前をイミディエイトウィンドウに出力します。テーブルがない場合、エラーになります。

WorkSheetのプロパティ
WorkSheetオブジェクトは「ListObjects」コレクションを持っています。インデックスもしくはテーブルの名前でコレクションから取得することができます。インデックスで指定する場合は、テーブルが作成された順番を指定します。
サンプルコード(クリックでコピー)
Private Sub Test_GetListObjectByWorkSheet_IndexVer()
Dim ws As Worksheet
Dim rng As Range
Dim list As ListObject
Set ws = ThisWorkbook.Worksheets(1)
Set list = ws.ListObjects(1)
Debug.Print list.Name
End Sub
Private Sub Test_GetListObjectByWorkSheet_NameVer()
Dim ws As Worksheet
Dim rng As Range
Dim list As ListObject
Set ws = ThisWorkbook.Worksheets(1)
Set list = ws.ListObjects("テーブル1")
Debug.Print list.Name
End Sub
実行結果
上記サンプルコードは、マクロが動作中のブックの一番左のシートで、一番最初に作成されたテーブル、もしくは「テーブル1」というの名前のテーブルを取得し、テーブルの名前をイミディエイトウィンドウに出力します。テーブルがない場合、エラーになります。
【PR】VBAエキスパート試験対策記事
当サイトでは、オデッセイコミュニケーションズ社が運営する試験であるVBAエキスパート(Excel VBA ベーシック/Excel VBA スタンダード)の出題範囲をベースに用語や各種関数の解説などを行っています。試験合格に向けて必須と言われる公式テキストに沿って解説をしています。受験をするか悩んでいる方、テキストとは別視点の解説を見てみたい方、受験はしないがExcelVBA(マクロ)に興味がある方へ向けた記事です。
Comment