「excel vba テーブル設定解除」
「エクセルマクロでテーブルの解除のコマンドは」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスが時折あることに気が付きました。
Excelをデータベースとして使う場合に便利なテーブルを解除して、通常のセル範囲に変換するExcel VBAのコードを探している方による検索です。
リボンからは、[テーブルツール]-[デザイン]タブ-[ツール]グループ-[範囲に変換]コマンドで、
テーブルを解除して通常の表に変換できるのですが、マクロ記録を行っても、テーブルを解除するVBAのコードは作られません。(残念!)
そのため、どのようなテーブルを範囲に変換するには、どのようなコードを書けばいいのかを探してしまう方がいらっしゃるのは、とても納得できます。
テーブルを解除するサンプルマクロ
以下のマクロで、アクティブなシートの、1つ目のテーブルを解除して、通常のセル範囲に変換することができます。
ActiveSheet.ListObjects(1).Unlist
End Sub
このマクロで利用しているオブジェクトモデルの階層関係は下図のとおりです。
ActiveSheetプロパティで、アクティブなシートを取得して、
WorksheetオブジェクトのListObjectsプロパティで、ワークシート上のすべてのテーブルを表すListObjectsコレクションオブジェクトを取得して、
ListObjectsコレクションオブジェクトの_Deafaultプロパティに、アクティブシート上の1つ目のテーブルを取得するために「1」を指定して、ListObjectを取得して、
ListObjectオブジェクトのUnlistメソッドで、
テーブルを解除しています。
どうやってListObject.Unlistメソッドを探したのか
「エクセルマクロでテーブルの解除のコマンドは」
といった検索をするレベルの方だと、私がどうやってListObject.Unlistメソッドを見つけたのかが気になる部分かもしれません。
私は、テーブルがListObjectオブジェクトであることはわかっていたので、オブジェクトブラウザで、メンバーをグループメンバー表示にして、ListObjectオブジェクトのメソッドを眺めて、
「Unlist」という名前から、テーブルを解除するメソッドだろうと判断しました。
アクティブブックの全テーブルを解除するサンプルマクロ
以下のマクロにすれば、アクティブなブックのすべてのテーブルを解除して、通常のセル範囲にすることができます。
Dim ws As Worksheet
For Each ws In Worksheets
Dim ls As ListObject
For Each ls In ws.ListObjects
ls.Unlist
Next ls
End Sub
先のマクロよりオブジェクトモデルの階層は一階層深くなっています。
アクティブなワークブックの、すべてのワークシートにFor Each~Nextループを回して、
For Each ws In Worksheets
各ワークシートの、すべてのテーブルにFor Each~Nextループを回して、
For Each ls In ws.ListObjects
順番にテーブル解除を行っています。
ls.Unlist
最終更新日時:2019-10-21 10:00
Home » エクセルマクロ・Excel VBAの使い方 » ListObjectオブジェクト » VBAでListObject・テーブルを解除してセル範囲に変換する