VBA ListObjects | ExcelVBAのListObjectExcelテーブルのガイド

VBAのListObjectsとは何ですか?

通常、テーブルに表示されるのはデータセットですが、VBAの用語では、データリストの合計範囲の範囲がある、列はリスト列、行はリスト行などと呼ばれます。したがって、このプロパティにアクセスするために、Listobjectsと呼ばれる組み込み関数があり、これはワークシート関数で使用されます。

VBA ListObjectは、VBAコードの記述中にExcelテーブルを参照する方法です。VBA LISTOBJECTSを使用することで、テーブルを作成、削除でき、VBAコードでExcelテーブルを操作できます。Excelテーブルはトリッキーで初心者であり、中級レベルのユーザーでもテーブルの操作が難しいと感じています。この記事では、VBAコーディングでのExcelテーブルの参照について説明しているため、Excelのテーブルについて十分な知識がある方がよいでしょう。

データがテーブルに変換されると、セルの範囲を操作するのではなく、テーブルの範囲を操作する必要があるため、この記事では、Excelテーブルを操作してVBAコードを効率的に書き込む方法を示します。

ExcelVBAでListObjectsを使用してテーブル形式を作成する

たとえば、以下のExcelデータを見てください。

VBA ListObjectコードを使用して、このデータのテーブル形式を作成します。

このVBAListObjects Excelテンプレートはここからダウンロードできます– VBA ListObjectsExcelテンプレート
  • このデータでは、最初に最後に使用された行と列を見つける必要があるため、これを見つけるために2つの変数を定義します。

コード:

 Sub List_Objects_Example1()Dim LR As Long Dim LC As Long End Sub 

  • 最後に使用された行と列を見つけるには、以下のコードを使用します。

コード:

LR = Cells(Rows.Count、1).End(xlUp).Row LC = Cells(1、Columns.Count).End(xlToLeft).Column

  • 次に、データの参照を保持する変数をもう1つ定義します。

コード:

 範囲としてのDimRng 

  • 次に、以下のコードを使用して、この変数への参照を設定します。

コード:

 Rng = Cells(1、1).Resize(LR、LC)に設定します

次に、VBAの「ListObject.Add」メソッドを使用してテーブルを作成する必要があります。以下はその構文です。

ListObject.Add(Source、XlListObjectHasHeaders、Destination、TableStyleName)

出典:これは、テーブルを挿入するセルの範囲については何もありません。したがって、ここでは「xlSrcRange」「xlSrcExternal」という2つの引数を指定できます。

XlListObjectHasHeaders:データを挿入するテーブルにヘッダーがあるかどうか。はいの場合は「xlYes」を提供でき、そうでない場合は「xlNo」を提供できます

宛先:これは私たちのデータ範囲に他なりません。

テーブルスタイル:テーブルスタイルを適用したい場合は、スタイルを提供できます。

  • さて、アクティブシートでテーブルを作成しているので、以下のコードでテーブルを作成します。

コード:

 Dim Ws As Worksheet Set Ws = ActiveSheet Ws.ListObjects.Add xlSrcRange、xllistobjecthasheaders:= xlYes、Destination:= Rng

  • この後、このテーブルに名前を付ける必要があります。

コード:

Ws.ListObjects(1).name = "EmpTable"

  • Below is the full code for your reference.

Code:

 Sub List_Objects_Example1() Dim LR As Long Dim LC As Long LR = Cells(Rows.Count, 1).End(xlUp).Row LC = Cells(1, Columns.Count).End(xlToLeft).Column Dim Rng As Range Set Rng = Cells(1, 1).Resize(LR, LC) Dim Ws As Worksheet Set Ws = ActiveSheet Ws.ListObjects.Add xlSrcRange, xllistobjecthasheaders:=xlYes, Destination:=Rng Ws.ListObjects(1).name = "EmpTable" End Sub 

Ok, let’s run the code and see the magic.

It has created the table to the mentioned data and given the table name as “EmpTable”.

Formatting Excel Tables with VBA ListObjects

Once the Excel table has been created we can work with tables by using vba ListObject collection.

  • First, define the variable as “ListObject”.

Code:

 Sub List_Objects_Example2() Dim MyTable As ListObject End Sub 

  • Now set the reference to this variable by using the table name.

Code:

 Sub List_Objects_Example2() Dim MyTable As ListObject Set MyTable = ActiveSheet.ListObjects("EmpTable") End Sub 

Now the variable “MyTable” holds the reference for the table “EmpTable”.

  • Enter the variable name and put a dot to see the properties and methods of the VBA ListObject.

For example, if we want to select the entire table then we need to use the “Range” object and under this, we need to use the “Select” method.

Code:

MyTable.Range.Select

This would select the entire data table including the heading.

  • If you want to select only the contents of the table without headers then we need to use “DataBodyRange”.

Code:

MyTable.DataBodyRange.Select

Like this, we can play around with tables.

  • Below is the list of activity codes for your reference.

Code:

 Sub List_Objects_Example2() Dim MyTable As ListObject Set MyTable = ActiveSheet.ListObjects("EmpTable") MyTable.DataBodyRange.Select 'To Select data range without headers MyTable.Range.Select 'To Select data range with headers MyTable.HeaderRowRange.Select 'To Select table header rows MyTable.ListColumns(2).Range.Select 'To select column 2 including header MyTable.ListColumns(2).DataBodyRange.Select 'To select column 2 without header End Sub 

Like this, we can use the “ListObject” collection to play around with excel tables.

Things to Remember

  • VBA ListObject is the collection of objects to reference excel tables.
  • To access ListObject collection first we need to specify what worksheet we are referring to is.