「vba excelテーブル名を取得」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
2003までのExcelで[リスト]と呼ばれていた機能が、2007以降は[テーブル]と呼び方が変わっています。Excelをデータベースとして使う場合に便利な機能です。
このテーブルの名前を取得するVBAのコードを探している方による検索でしょうか。
「vba excelテーブル名を取得」
という検索キーワードだけでは、詳細がわかりませんので、参考になりそうなマクロを2つご紹介しておきます。
アクティブシート上の一つ目のテーブル名を取得するサンプルマクロ
以下のマクロを実行すると、アクティブなシート上の、1つ目のテーブルの名前がメッセージボックスに表示されます。
MsgBox ActiveSheet.ListObjects(1).Name
End Sub
上記のマクロで利用しているオブジェクトモデルを階層図にすると、下図のようなイメージです。
コードの意味は以下のとおりです。
WorkSheetオブジェクトのListObjectsプロパティで、ListObjectsコレクションオブジェクトを取得して、
ListObjectsコレクションオブジェクトのデフォルトプロパティ(_Defaultプロパティ)の引数に「1」を指定することで、1つ目のListObjectオブジェクトを取得して、
そのListObjectオブジェクトのNameプロパティを取得して、
メッセージボックスに表示しています。
アクティブブック上の全テーブル名を取得するサンプルマクロ
実務で要望としてあがりそうなのが、ブック内の、すべてのテーブル名を取得したいという要望です。
以下のようなマクロで、アクティブなブック内の、全テーブル名を取得して、イミディエイトウィンドウに出力できます。
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
Dim lst As ListObject
For Each lst In ws.ListObjects
Debug.Print lst.Name
Next lst
Next ws
End Sub
先のマクロよりもオブジェクトモデルの階層が一段深くなっています。
オブジェクトブラウザーで「listobjects」を検索してみるとわかるとおり、ListObjectsコレクションオブジェクトを取得するための、ListObjectsプロパティは、Worksheetオブジェクトにだけ存在していますから、
アクティブなワークブックに含まれる、すべてのワークシートに対してFor Each~Nextループを回して、
For Each ws In ActiveWorkbook.Worksheets
個々のワークシート上のすべてのListObjectに対してFor Each~Nextループを回し、
For Each lst In ws.ListObjects
ListObjectオブジェクトの名前をDebug.Printしています。
Debug.Print lst.Name
最終更新日時:2019-10-30 15:42
- Newer:モヤモヤが晴れていく過程が心地よかった
- Older:選択されている図形と同じ形状の図形をすべて選択するパワポマクロ
Home » エクセルマクロ・Excel VBAの使い方 » ListObjectオブジェクト » Excel VBAでテーブル名を取得する-ListObject.Name