データベース研究所の記事です。 ListObject オブジェクトを使ったマクロを作っていると、見出しの部分のデータを参照 したいなあと思うことが結構あります。そんなわけで、この記事で基本的な参照法を確認しておきましょー。今回は以下のデータを使うので、実践してみたい人はコピーしてシートに貼りつけてくださいな。
氏名 | ふりがな | 住所 |
---|---|---|
嘉向 仰 | かむき あおぎ | 東京都板橋区竹原中郷 8-6-5 |
龍見 青児 | たつみ せいじ | 東京都目黒区青木 8-4-7 |
鉄炮塚 恒成 | てっぽうづか つねなり | 東京都新宿区川口 1-39-10 |
与羽瀬 梓 | よはぜ あづさ | 東京都港区中央台 1-42-8 |
鍋釜 孝正 | なべかま たかまさ | 東京都中野区新塚 7-23-3 |
上の表を見出し付テーブルに変換しすると次のようになりますよ。
このテーブルから、見出しにある「氏名」、「ふりがな」、「住所」という文字列を取り出してみます。
見出しデータを出力します
リスト内のセルを選択した状態で以下のマクロを実行してくださいな。
Dim i As Integer, lct As Integer
Dim myrange As Range
'選択したリストの行数を数えます
lct = Selection.ListObject.ListColumns.Count
'リストの見出し行を得ます
Set myrange = Selection.ListObject.HeaderRowRange
'見出し行にある各セルのデータを出力します
For i = 1 To lct
Debug.Print myrange.Cells(1, i),
Next
End Sub
マクロを実行するとイミディエイトウィンドウに「氏名、ふりがな、住所」と表示されるはずです。
HeaderRowRange プロパティ
ListObject オブジェクトは Range オブジェクトの1つ下の階層に位置しています。
と書けば、 HeaderRowRange プロパティ によって得た見出し行のセル範囲を、変数 myrange にセル範囲をぽいっと放り込むことができるのです。 Range 型変数は本当に便利ですね。 myrange には見出しを構成する3つのセルが入っているので、たとえば
と書けば、範囲の一番左である「氏名」というデータを参照していることになります。上のマクロでは列を変数 i にして For...Next ステートメントで 1, 2, 3 と動かして3つの見出しを順に表示させています。