このサイト・インストラクターのネタ帳のアクセスログを眺めていて、
「vba 選択しているセルがテーブルかを取得 excel」
という検索キーワードに気づきました。
Excel VBA(Visual Basic for Applications)で、選択されているセルが、テーブル(ListObjectオブジェクト)に含まれているかどうかを調べる方法を探していた方による検索です。
オブジェクト変数を使ってアクティブセルがテーブルに含まれるかを判定するサンプルマクロ
以下のようなコードでアクティブなセルが、ListObjectオブジェクトに含まれるかどうかを判定できます。
Dim lst As ListObject
Set lst = ActiveCell.ListObject
If lst Is Nothing Then
MsgBox "テーブル(ListObject)ではありません。"
Else
MsgBox "テーブル(ListObject)です!"
End If
End Sub
Rangeオブジェクトには、ListObjectオブジェクトを返す、ListObjectプロパティが用意されています。
Range.ListObjectプロパティの戻りを調べて、NothingであればListObjectオブジェクトに含まれていないRangeであると判定できます。
ListObject.Nameを使ってアクティブセルがテーブルに含まれるかを判定するサンプルマクロ
オブジェクト変数が苦手だという方の場合は、以下のようなプロシージャでしょうか。
On Error Resume Next
If ActiveCell.ListObject.Name = "" Then
MsgBox "テーブル(ListObject)ではありません。"
Else
MsgBox "テーブル(ListObject)です!"
End If
On Error GoTo 0
End Sub
アクティブなセルが、テーブルに含まれていれば「ActiveCell.ListObject.Name」というオブジェクト式で、テーブル名が返されるので、空白であればテーブルに含まれていないと判定できます。
ただし、アクティブセルがテーブルに含まれていないときには、
If ActiveCell.ListObject.Name = "" Then
で実行時エラーが発生しますから、事前にOn Error Resume Next文を入れています。
- Newer:Range.CountLargeプロパティとは
- Older:VBAでアクティブセルの行・列を選択する
Home » エクセルマクロ・Excel VBAの使い方 » ListObjectオブジェクト » アクティブセルがテーブルかを判定する-Range.ListObjectプロパティ