「エクセル マクロ テーブルをアクティブに」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
テーブルをアクティブにする・選択する、Excelマクロ・VBA(Visual Basic for Applications)のコードを探している方による検索です。
テーブル全体を選択するサンプルマクロ
以下のようなマクロで、アクティブシート上の、一つ目のテーブルを選択することができます。
On Error Resume Next
ActiveSheet.ListObjects(1).Range.Activate
End Sub
Worksheet.ListObjectsプロパティで、ListObjectsコレクションオブジェクトが取得できます。
そのデフォルトプロパティに「1」を指定することで一つ目のListObjectオブジェクトを取得するのが、
「ListObjects(1)」というオブジェクト式の意味です。
ListObjectオブジェクトをオブジェクトブラウザーで調べても、Activate的なメソッドは存在していませんが、
リスト内のセル範囲を選択することで、リストをアクティブにすることができるとの記述がヘルプにあります。
この情報を元に作ったのが「ListObjects(1).Range.Activate」というオブジェクト式です。
そもそもテーブルが存在していない・ListObjectオブジェクトが存在していないワークシート上で、
ActiveSheet.ListObjects(1).Range.Activate
というコードを実行するとエラーとなってしまうので、事前に
On Error Resume Next
を入れています。
ワークシートがアクティブになったときにテーブルを選択するイベントプロシージャ
上記の、
ActiveSheet.ListObjects(1).Range.Activate
というコードをイベントプロシージャに入れておけば、シートがアクティブになったときに、テーブルを選択することもできます。
On Error Resume Next
ActiveSheet.ListObjects(1).Range.Activate
End Sub
テーブルの含まれているワークシートの、Worksheet_Activateイベントプロシージャを、上記のようにすれば、このワークシートがアクティブになったときに、必ず一つ目のテーブルが選択されます。
テーブル内の一つのセルを選択するサンプルマクロ
以下のようなマクロにすれば、アクティブシート上の、一つ目のテーブルの1行1列目のセルを選択することもできます。
On Error Resume Next
ActiveSheet.ListObjects(1).Range.Cells(1, 1).Activate
End Sub
先のテーブル全体を選択するマクロとの違いは、Rangeあとに「.Cells(1, 1)」が入っているところです。
ListObject.Rangeプロパティでリスト全体のセル範囲を取得できるので、そのセル範囲の中の1行1列目のセルを、Cellsプロパティを使って取得しているのが「ListObjects(1).Range.Cells(1, 1)」というオブジェクト式の意味です。
Home » エクセルマクロ・Excel VBAの使い方 » ListObjectオブジェクト » VBAでListObject・テーブルを選択する