Office
 Computer >> コンピューター >  >> ソフトウェア >> Office

【完全ガイド】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として指定し、その名前を使ってアクセスします。

【完全ガイド】Excel VBAでテーブルを参照する方法20選

Sub Select_whole_Table()
    ActiveSheet.ListObjects("Table_ref_1").Range.Select
End Sub

実行すると、テーブル全体(見出し行とデータ行すべて)が選択されます。

【完全ガイド】Excel VBAでテーブルを参照する方法20選

2. テーブル全体をコピーする

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

【完全ガイド】Excel VBAでテーブルを参照する方法20選

Sub copy_whole_Table()
    ActiveSheet.ListObjects("Table_ref_18").Range.Copy
End Sub

実行後、任意のセルで貼り付けを行えば、テーブル全体を複製できます。

【完全ガイド】Excel VBAでテーブルを参照する方法20選

3. テーブルの特定の列を参照する

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

【完全ガイド】Excel VBAでテーブルを参照する方法20選

Sub ReferenceEntireColumn()
    ActiveSheet.ListObjects("Table_ref").ListColumns("Seller").Range.Select
End Sub

この例では「Seller」列(見出し含む)全体が選択されます。

【完全ガイド】Excel VBAでテーブルを参照する方法20選

4. テーブル内のセルから値を取得する

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

【完全ガイド】Excel VBAでテーブルを参照する方法20選

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」と完全一致する値を検索し、メッセージボックスに結果を表示します。

【完全ガイド】Excel VBAでテーブルを参照する方法20選

5. テーブルに行を追加する

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

【完全ガイド】Excel VBAでテーブルを参照する方法20選

Sub Entering_row()
    Dim Table1 As ListObject
    Set Table1 = ActiveSheet.ListObjects("Table_ref_3")
    Table1.ListRows.Add
End Sub

実行すると、テーブルの最下部に空の新規行が追加されます。

【完全ガイド】Excel VBAでテーブルを参照する方法20選

6. テーブルに列を追加する

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

【完全ガイド】Excel VBAでテーブルを参照する方法20選

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

【完全ガイド】Excel VBAでテーブルを参照する方法20選

7. テーブルをフィルターする

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

【完全ガイド】Excel VBAでテーブルを参照する方法20選

Sub Select_AutoFiltered_VisibleRows_NewSheet()
    ActiveSheet.ListObjects("Table_25").Range.AutoFilter _
        Field:=2, Criteria1:="=Texas"
End Sub

この例では2列目を対象に「Texas」という文字列で抽出を行います。

【完全ガイド】Excel VBAでテーブルを参照する方法20選

8. テーブルから行と列を削除する

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

【完全ガイド】Excel VBAでテーブルを参照する方法20選

Sub delete_row_column()
    ActiveSheet.ListObjects("Table_ref_9").ListRows(2).Delete
    ActiveSheet.ListObjects("Table_ref_9").ListColumns(2).Delete
End Sub

実行すると、2行目と2列目がテーブルから削除されます。

【完全ガイド】Excel VBAでテーブルを参照する方法20選

9. 見出しを除いてデータのみを選択する

DataBodyRangeプロパティを使うと、見出し行を含まないデータ部分だけを参照できます。

【完全ガイド】Excel VBAでテーブルを参照する方法20選

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

【完全ガイド】Excel VBAでテーブルを参照する方法20選

10. 列見出しを選択する

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

【完全ガイド】Excel VBAでテーブルを参照する方法20選

Sub Selecting_Column_Header()
    ActiveSheet.ListObjects("Table_ref_7").HeaderRowRange(4).Select
End Sub

この例では4つ目の列見出しが選択されます。

【完全ガイド】Excel VBAでテーブルを参照する方法20選

11. 行全体を選択する

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

【完全ガイド】Excel VBAでテーブルを参照する方法20選

Sub Selecting_row_entire()
    ActiveSheet.ListObjects("Table_ref_8").ListRows(3).Range.Select
End Sub

この例ではテーブルの3行目が選択されます。

【完全ガイド】Excel VBAでテーブルを参照する方法20選

12. テーブルの範囲サイズを変更する

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

【完全ガイド】Excel VBAでテーブルを参照する方法20選

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に変更されます。

【完全ガイド】Excel VBAでテーブルを参照する方法20選

13. テーブルのスタイルを変更する

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

【完全ガイド】Excel VBAでテーブルを参照する方法20選

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

【完全ガイド】Excel VBAでテーブルを参照する方法20選

14. 既定のテーブルスタイルを設定する

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

【完全ガイド】Excel VBAでテーブルを参照する方法20選

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

【完全ガイド】Excel VBAでテーブルを参照する方法20選

15. テーブル内の全セルをループ処理する

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

【完全ガイド】Excel VBAでテーブルを参照する方法20選

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

実行すると、テーブルの各行が先頭から順に選択されていきます。

【完全ガイド】Excel VBAでテーブルを参照する方法20選

16. テーブルの見出しを表示する

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

【完全ガイド】Excel VBAでテーブルを参照する方法20選

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

【完全ガイド】Excel VBAでテーブルを参照する方法20選

17. 行数と列数をカウントする

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

【完全ガイド】Excel VBAでテーブルを参照する方法20選

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

実行すると、行数と列数がメッセージボックスに表示されます。

【完全ガイド】Excel VBAでテーブルを参照する方法20選

18. ワークシートにテーブルが存在するか確認する

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

【完全ガイド】Excel VBAでテーブルを参照する方法20選

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

※元のコードには変数名のタイポと判定ロジックの反転がありましたが、正しく動作するよう修正しています。

【完全ガイド】Excel VBAでテーブルを参照する方法20選

19. テーブルを通常の範囲に変換する

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

【完全ガイド】Excel VBAでテーブルを参照する方法20選

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

【完全ガイド】Excel VBAでテーブルを参照する方法20選

20. テーブルを削除する

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

【完全ガイド】Excel VBAでテーブルを参照する方法20選

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

【完全ガイド】Excel VBAでテーブルを参照する方法20選

まとめ

今回は、Excel VBAでテーブル(ListObject)を参照・操作するための20の実用例を紹介しました。テーブル名による参照を活用すれば、データ量が増減してもコードの修正不要で、保守性の高いマクロを作成できます。まずは基本の「テーブル全体の選択」から始めて、行・列の追加削除、フィルター、スタイル変更など、目的に応じたテクニックを少しずつ身につけていきましょう。

ご不明な点やご要望があれば、コメント欄でお気軽にお知らせください。Excelに関するさまざまな問題と解決策については、当サイトの他の記事もぜひご覧ください。学びを続けて、スキルアップを目指しましょう!

関連記事

ワークシート関数とExcel VBAで英字の大文字・小文字を変換する方法

【8つの技】Excelのテーブルをおしゃれに見せるコツ

  1. Excelのデータモデル活用術:3つのステップで複数テーブルを統合する方法

    Excelは膨大なデータを処理できる強力なツールですが、データモデル機能を活用していなければ、その真価を発揮できていないかもしれません。データモデルを使えば、共通の列を基準にテーブル間のリレーションシップ(関連付け)を作成し、複数のテーブルからデータを結合できます。この記事では、Excelのデータモデルの基本的な使い方を、わかりやすい手順とともに解説します。 理解を深めながら実際に練習したい方は、サンプルのExcelワークブックをダウンロードして、ご自身でも操作してみてください。 データモデルを使うメリット データモデルはバックグラウンドで動作し、ピボットテーブルなどのレポート機能を効率

  2. Excel で値が重複するリレーションシップを作成する方法

    多くの場合、 関係 を作成する必要があります。 重複を含む Excel で データセットには使用できる共通の列があるためです。しかし、どういうわけか両方のテーブルに Duplicate がある場合 値の場合、プロセスの実行が非常に難しくなります。セル値のリストから複数のワークシートを作成する方法を知りたい場合は、この記事が役に立つかもしれません。この記事では、Excel で重複するセル値との関係を作成する方法について詳しく説明します。 この練習用ワークブックを以下からダウンロードしてください。 人間関係を作る 2 つの簡単な方法 重複を含む Excel で 値 関係を作成するために、次の