【Excel】テーブルと名前の管理
いくら調べても解らなかった事です。ご存知のかた、おられるでしょうか?
まず、適当な範囲を、Ctrl+t
などで、テーブルに変換します。そして、デザインタブから、テーブルの名前をつけます。ここでは、T_Test
とでもしておきます。
こうした場合、名前の管理画面にはもちろん、T_Test
が設定されています。
私が知りたいのは、ここにおける名前はいったい何なのか、という事です。
と言うのは、この名前の管理画面で、テーブル名が示している参照範囲をよく見ると、テーブル全体では無く、テーブルのデータ部分を示しているのです。
テーブルを設定する所をマクロ記録してみると、当然、対象のシートに、ListObject
オブジェクトが追加されます(ListObjects.Add
メソッド)。ですから、名前の管理画面に表示されている参照範囲は、ListObject("T_Test").Range
であろうと思われるのですが、先に書いたように、実際にはテーブルのデータ部分、つまり、ListObject("T_Test").DataBodyRange
部分を指している訳です。
という事は、もしかしたら、ListObject
オブジェクトを追加するとともに、そのデータ部分を、ワークブックのNames
に追加しているのだろうか、と思って、そこを調べてみたのですが、どうも違うようです。結局の所、これは何につけられた名前なのでしょうか。
名前の管理における参照範囲がDataBodyRange
部分となっているのは、色々と便利です。たとえば、入力規則のリスト範囲を自動的に変更したい場合を考えると、1列のテーブルを作っておけば、入力規則の指定部分に=INDIRECT("T_Test")
と入れさえすれば、そのデータ部分がリストに出来たりするからです(後からデータ部分に名前をつけたり、構造化参照で列を指定しなくて良い)。
で、実際便利なのですが、よく考えてみると、なんで見出しはちゃんと除かれるのだろう、そもそも名前の管理でのテーブル名は、ListObject.Range
プロパティにつけられた名前とは違うのではないか、と思い至ったのでありました。
もしかしたら、私が基本的な部分を知らないだけの可能性もありますが、どなたか、詳しい構造をご存知ないでしょうか。