【完全ガイド】Excel VBAでテーブルを参照する方法20選
大量のデータを扱うExcelブックでは、セル範囲全体を指定するよりも、テーブルを名前で参照する方がはるかに便利です。そして、あらゆる操作を高速・確実・効率的に実行するには、VBA(Visual Basic for Applications)の活用が最適な手段となります。本記事では、「Excel VBAでテーブルを参照する方法」について、実践的な20のサンプルコードを使いながら徹底的に解説します。基本から応用まで順を追って学び、ぜひ日々の業務に役立ててください。
ListObjectプロパティでテーブルを参照する基礎知識
VBAのコード内でExcelのテーブルを参照する際に使われるのがListObjectsです。ListObjectオブジェクトを利用すれば、テーブル全体の選択やコピーだけでなく、行・列の追加や削除、スタイルの変更など、テーブルに関するほぼすべての操作をプログラムから実行できます。
たとえば、ワークシート上のテーブル全体を選択したい場合は、次の一行だけで実現できます。
ActiveSheet.ListObjects("Table_ref_1").Range.Select
このコードを実行すると、「Table_ref_1」という名前のテーブル全体が選択されます。このように、範囲をセル番地で指定する方法と比べて、テーブル名で参照する方法は可読性が高く、行や列が増減してもコードを修正する必要がないという大きなメリットがあります。
事前準備:マクロ実行までの共通手順
以降で紹介する20の例は、すべて以下の共通手順で実行できます。まず最初に、この流れをしっかり押さえておきましょう。
- VBE(Visual Basic Editor)を開く:リボンの「開発」タブ→「Visual Basic」をクリックします。「開発」タブが表示されていない場合は、ファイル→オプション→リボンのユーザー設定から有効化しておきましょう。
- モジュールを挿入する:VBEのメニューから「挿入」→「標準モジュール」を選択します。VBAのコードはこのモジュール内に記述します。
- コードを記述して保存する:新しいモジュールに後述のサンプルコードを貼り付けます。
- マクロを実行する:キーボードのF5キーを押すか、メニューの「実行」→「Sub/ユーザーフォームの実行」を選択します。ツールバーの再生(▶)アイコンをクリックしても実行できます。
本記事のサンプルはMicrosoft 365のExcelで動作確認していますが、他のバージョンでも同様の手順で利用できます。
VBAでテーブルを操作する20の実用例
1. テーブル全体を選択する
既存のテーブルを参照するには、テーブルをListObjectとして指定し、その名前を使ってアクセスします。

Sub Select_whole_Table()
ActiveSheet.ListObjects("Table_ref_1").Range.Select
End Sub
実行すると、テーブル全体(見出し行とデータ行すべて)が選択されます。

2. テーブル全体をコピーする
テーブル全体をクリップボードにコピーするには、Rangeオブジェクトに対してCopyメソッドを使用します。

Sub copy_whole_Table()
ActiveSheet.ListObjects("Table_ref_18").Range.Copy
End Sub
実行後、任意のセルで貼り付けを行えば、テーブル全体を複製できます。

3. テーブルの特定の列を参照する
ListColumnsコレクションに列名を指定すると、テーブル内の特定の列だけを参照できます。

Sub ReferenceEntireColumn()
ActiveSheet.ListObjects("Table_ref").ListColumns("Seller").Range.Select
End Sub
この例では「Seller」列(見出し含む)全体が選択されます。

4. テーブル内のセルから値を取得する
DataBodyRangeとFindメソッドを組み合わせると、テーブル内から目的の値を検索して取得できます。

Sub get_Value()
Dim Table1 As ListObject
Set Table1 = ActiveSheet.ListObjects("Table_ref_2")
Set Value = Table1.DataBodyRange.Columns(1).Find("Sam", LookAt:=xlWhole)
MsgBox Value
End Sub
1列目から「Sam」と完全一致する値を検索し、メッセージボックスに結果を表示します。

5. テーブルに行を追加する
ListRows.Addメソッドを使うと、既存のテーブルの末尾に新しい行を追加できます。

Sub Entering_row()
Dim Table1 As ListObject
Set Table1 = ActiveSheet.ListObjects("Table_ref_3")
Table1.ListRows.Add
End Sub
実行すると、テーブルの最下部に空の新規行が追加されます。

6. テーブルに列を追加する
同様に、ListColumns.Addメソッドでテーブルの右端に新しい列を追加できます。

Sub Entering_Column()
Dim Table1 As ListObject
Set Table1 = ActiveSheet.ListObjects("Table_ref_4")
Table1.ListColumns.Add
End Sub

7. テーブルをフィルターする
AutoFilterメソッドを使えば、条件に合致するデータだけを絞り込んで表示できます。

Sub Select_AutoFiltered_VisibleRows_NewSheet()
ActiveSheet.ListObjects("Table_25").Range.AutoFilter _
Field:=2, Criteria1:="=Texas"
End Sub
この例では2列目を対象に「Texas」という文字列で抽出を行います。

8. テーブルから行と列を削除する
ListRowsやListColumnsにインデックス番号を指定してDeleteメソッドを呼び出すことで、任意の行・列を削除できます。

Sub delete_row_column()
ActiveSheet.ListObjects("Table_ref_9").ListRows(2).Delete
ActiveSheet.ListObjects("Table_ref_9").ListColumns(2).Delete
End Sub
実行すると、2行目と2列目がテーブルから削除されます。

9. 見出しを除いてデータのみを選択する
DataBodyRangeプロパティを使うと、見出し行を含まないデータ部分だけを参照できます。

Sub ReferenceEntireColumnWithoutHeader()
ActiveSheet.ListObjects("Table_ref_6").ListColumns("Seller").DataBodyRange.Select
End Sub

10. 列見出しを選択する
HeaderRowRangeプロパティにインデックス番号を指定すると、特定の見出しセルだけを選択できます。

Sub Selecting_Column_Header()
ActiveSheet.ListObjects("Table_ref_7").HeaderRowRange(4).Select
End Sub
この例では4つ目の列見出しが選択されます。

11. 行全体を選択する
ListRowsに番号を指定すれば、テーブル内の任意の行全体を参照できます。

Sub Selecting_row_entire()
ActiveSheet.ListObjects("Table_ref_8").ListRows(3).Range.Select
End Sub
この例ではテーブルの3行目が選択されます。

12. テーブルの範囲サイズを変更する
Resizeメソッドを使うと、テーブルの範囲を別のセル範囲に変更(拡大・縮小)できます。

Sub resize()
Dim Table1 As ListObject
Set Table1 = ActiveSheet.ListObjects("Table_ref_5")
Dim Rng As Range
Set Rng = Range("B4:C8")
Table1.Resize Rng
End Sub
実行すると、テーブルの範囲がB4:C8に変更されます。

13. テーブルのスタイルを変更する
TableStyleプロパティに組み込みスタイル名を設定することで、テーブルのデザインを一瞬で切り替えられます。

Sub ChangingTable1_Style()
ActiveSheet.ListObjects("Table_ref_12").TableStyle = "TableStyleLight15"
End Sub

14. 既定のテーブルスタイルを設定する
DefaultTableStyleプロパティを変更すると、今後作成するすべてのテーブルに適用される既定のスタイルを指定できます。

Sub Setting_Default_Table1_Style()
ActiveWorkbook.DefaultTableStyle = "TableStyleMedium2"
End Sub

15. テーブル内の全セルをループ処理する
ListRows.CountプロパティとFor文を組み合わせると、テーブルの各行を順番に処理できます。データ件数が変わってもコードを修正する必要がないのがポイントです。

Sub Loopingthrough()
Dim Table1 As ListObject
Set Table1 = ActiveSheet.ListObjects("Table_ref_14")
For i = 1 To Table1.ListRows.Count
Table1.ListRows(i).Range.Select
Next i
End Sub
実行すると、テーブルの各行が先頭から順に選択されていきます。

16. テーブルの見出しを表示する
ShowHeadersプロパティをTrueに設定すると、非表示になっている見出し行を再表示できます。

Sub Table_header_visible()
ActiveSheet.ListObjects("Table_ref_15").ShowHeaders = True
End Sub

17. 行数と列数をカウントする
ListRows.CountとListColumns.Countを使えば、テーブルの規模を簡単に取得できます。集計前のデータチェックなどに便利です。

Sub counting_rows_columns()
rowNumber = ActiveSheet.ListObjects("Table_ref_16").ListRows.Count
columnNumber = ActiveSheet.ListObjects("Table_ref_16").ListColumns.Count
MsgBox "行数:" & rowNumber & vbCrLf & _
"列数:" & columnNumber
End Sub
実行すると、行数と列数がメッセージボックスに表示されます。

18. ワークシートにテーブルが存在するか確認する
ブック内のすべてのワークシートを走査し、特定の名前のテーブルが存在するかどうかを判定する実用的なコードです。

Sub Checking_If_Table_Exists()
Dim ws1 As Worksheet
Dim tbl1 As ListObject
Dim tbl1Name As String
Dim tbl1Exists As Boolean
tbl1Name = "Table_ref_17"
For Each ws1 In ActiveWorkbook.Worksheets
For Each tbl1 In ws1.ListObjects
If tbl1.Name = tbl1Name Then
tbl1Exists = True
End If
Next tbl1
Next ws1
If tbl1Exists = True Then
MsgBox "テーブル " & tbl1Name & " は存在します。"
Else
MsgBox "テーブル " & tbl1Name & " は存在しません。"
End If
End Sub
※元のコードには変数名のタイポと判定ロジックの反転がありましたが、正しく動作するよう修正しています。

19. テーブルを通常の範囲に変換する
Unlistメソッドを使うと、テーブルとしての機能を解除し、普通のセル範囲に戻すことができます。

Sub Converting_Table1_To_NormalRange()
ActiveSheet.ListObjects("Table_ref_11").Unlist
End Sub

20. テーブルを削除する
Deleteメソッドを呼び出すだけで、テーブルそのものをシートから削除できます。

Sub delete_table_entire()
Dim Table1 As ListObject
Set Table1 = ActiveSheet.ListObjects("Table_ref_10")
Table1.Delete
End Sub

まとめ
今回は、Excel VBAでテーブル(ListObject)を参照・操作するための20の実用例を紹介しました。テーブル名による参照を活用すれば、データ量が増減してもコードの修正不要で、保守性の高いマクロを作成できます。まずは基本の「テーブル全体の選択」から始めて、行・列の追加削除、フィルター、スタイル変更など、目的に応じたテクニックを少しずつ身につけていきましょう。
ご不明な点やご要望があれば、コメント欄でお気軽にお知らせください。Excelに関するさまざまな問題と解決策については、当サイトの他の記事もぜひご覧ください。学びを続けて、スキルアップを目指しましょう!
関連記事
ワークシート関数とExcel VBAで英字の大文字・小文字を変換する方法
【8つの技】Excelのテーブルをおしゃれに見せるコツ
-
Excelのデータモデル活用術:3つのステップで複数テーブルを統合する方法
Excelは膨大なデータを処理できる強力なツールですが、データモデル機能を活用していなければ、その真価を発揮できていないかもしれません。データモデルを使えば、共通の列を基準にテーブル間のリレーションシップ(関連付け)を作成し、複数のテーブルからデータを結合できます。この記事では、Excelのデータモデルの基本的な使い方を、わかりやすい手順とともに解説します。 理解を深めながら実際に練習したい方は、サンプルのExcelワークブックをダウンロードして、ご自身でも操作してみてください。 データモデルを使うメリット データモデルはバックグラウンドで動作し、ピボットテーブルなどのレポート機能を効率
-
Excel で値が重複するリレーションシップを作成する方法
多くの場合、 関係 を作成する必要があります。 重複を含む Excel で データセットには使用できる共通の列があるためです。しかし、どういうわけか両方のテーブルに Duplicate がある場合 値の場合、プロセスの実行が非常に難しくなります。セル値のリストから複数のワークシートを作成する方法を知りたい場合は、この記事が役に立つかもしれません。この記事では、Excel で重複するセル値との関係を作成する方法について詳しく説明します。 この練習用ワークブックを以下からダウンロードしてください。 人間関係を作る 2 つの簡単な方法 重複を含む Excel で 値 関係を作成するために、次の