Excel VBAでテーブルを指定・選択する記述

Excel テーブル

スポンサーリンク

はじめに:ソースコード

今回は、Excel VBAでテーブル(のセル範囲)を選択する方法について、簡単に解説する。
私自身、あまり好んでVBAでテーブルを扱うことはしないけどね。

まず、サンプルのソースコードを書く。
これのコメントにおおよその解説も書いてあるけど、合わせて読んでもらえればと思う。

テーブル(ListObject)の指定方法

Excelのテーブルは、VBAではListObjectというものに属する。
実際のマクロ作成では、いちいちそれを変数にセットしなくても良いといえば良い場合もあるが、なるべく変数にセットして分かりやすくしよう。

今回の例では、テーブルを、LSTという変数にセットする方式で解説してるけど、セットの仕方は主に3種類といったところ。

方法(1)シート内のテーブルのうち1個めという指定。

Set LST = ws.ListObjects(1)
ということで、シート内に存在するListObjectsのうち1個めを適当に指定するという方法。

もちろん、シート内にテーブル(ListObjects)が複数あってそのうち3つ目を指定したい場合なら

とかなるが、そもそもシート内にテーブルを複数設置するなんて真似をすることはまず無いだろうし、すべきでもない。

だから、シート内のテーブルは必ず1個しか無いという前提のもと、この方法(1)をメインに使っても良いかとは思う。

方法(2)テーブルの名前を具体的に指定する方法。

Excelのテーブルには名前を設定することができるし、ぜひ付けるべきだ。
その名前を「予算テーブル」としたなら、

といった形で名前を指定することでテーブルのオブジェクトを指定できる。

ただ私は、テーブルの名前は気分次第というかしっくり来なくて変えることが多いので、この方法はあまり使わない。

敢えてこの方法を使うなら、「テーブル名はシート名と同じ名前にする」という規則を設けた上で名前を固定して扱う時にやったりする。

Excel テーブルやピボットテーブルの名前の付け方(参考程度)

Excel テーブルにはしっかり名前を付けよう

方法(3)テーブルが含まれるセルをどこか1箇所起点として指定する方法

たとえば上図のテーブルなら


とすれば指定できるし、Cells(5, 3)つまりC5セルなどもテーブル範囲に含まれるから


みたいにも指定できる。

テーブル範囲に含まれているセルを、どこか指定すれば良いわけで、これも無難な方法の一つだろう。

そしてこの指定方法だけは、ListObjectの最後にsの文字が付かない。

前に示した方法(1)(2)は、
ws.ListObjects
ということで、wsというWorksheet=シートに対し付属していたから「s」が最後に付いた。

それに対し方法(3)は
ws.Cells(1, 1).ListObject
と、ws(Worksheet=シート)より小さな単位であるCells(=セル)に付属するから「s」が最後に付かない。

・・・と書いてみたけど、実際にソースコードを書いて、エラーを出したりしてみれば身に付くだろう。

テーブルのセル範囲の選択

ソースコードの後半に書いたように、テーブル(ListObject)を指定した後に、具体的にそのデータが入っているセル範囲などを選択するには、DataBodyRangeなど独特の指定方法がある。

単に
LST.Select
と書いてもエラーになるだけで、テーブルのセル範囲を選択することはできない。

「Range」「DataBodyRange」など何かしら付けなければならない。

ちなみに、テーブルには集計行というのを特別に設けることもあって、それは
LST.TotalsRowRange.Select
と指定する。使う機会は少ないのではと思うが。

スポンサーリンク