「vba if 行選択だったら」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
行全体が選択されているかどうかの判定を行う、Excel VBAのコードを探している方による検索でしょうか。
行が選択されているかどうかは、いくつかの方法で判定できます。
IsNumeric関数を使って判定する
RangeオブジェクトのAddressプロパティで返される文字列が、数字のみかどうかを調べることで、行が選択されているかの判定をできます。
If TypeName(Selection) <> "Range" Then Exit Sub
Dim rng_addr As String
rng_addr = Selection.Address(False, False)
rng_addr = Replace(rng_addr, ":", "")
If IsNumeric(rng_addr) Then
MsgBox "行が選択されています。"
Else
MsgBox "行が選択されていません。"
End If
End Sub
Range.Addressプロパティで、選択されているセルのアドレスを変数に格納し、
rng_addr = Selection.Address(False, False)
「:」(コロン)を取り除いて、
rng_addr = Replace(rng_addr, ":", "")
数字だけかどうかを判定しています。
If IsNumeric(rng_addr) Then
Range.Addressプロパティは、第1引数・第2引数ともにFalseを指定すると、絶対参照マーク「$」のないセル番地を返してきます。
例えば、
A1セルが選択されていれば「A1」
A1:G8セルが選択されていれば「A1:G8」
1行目から8行目が選択されていれば「1:8」
という文字列を返してきます。
行が選択されているときは、数字と「:」(コロン)だけなのがポイントです。
行が選択されているときは、「:」を取り除いてしまえば数字だけになります。
それを利用したのが上記のサンプルマクロです。
AddressとEntireRow.Addressを比較して判定する
Range.AddressプロパティとRange.EntireRow.Addressプロパティを比較するという方法でも、行が選択されているかという判定ができます。
If TypeName(Selection) <> "Range" Then Exit Sub
With Selection
If .Address = .EntireRow.Address Then
MsgBox "行が選択されています。"
Else
MsgBox "行が選択されていません。"
End If
End With
End Sub
Range.EinterRowプロパティは、元のRangeオブジェクトの、行全体のRangeオブジェクトを返してくるプロパティです。
Selection.EntireRowは、セルが選択されているときには、選択されているセルの行全体のRangeオブジェクトを返してきます。
例えば、A1:G8セルが選択されているときにSelection.EntireRowは、1行目から8行目までのセル範囲を返してきます。
そのAddressプロパティ、Selection.EntireRow.Addressは、「$1:$8」という文字列を返してきます。
1行目から8行目までの行全体が選択されているときは、
Selection.Addressも
Selection.EntireRow.Addressも同じ「$1:$8」を返してきます。
これを利用したのが上記のサンプルマクロです。
最終更新日時:2021-09-05 06:40
Home » Excel VBA Rangeオブジェクト » 行・列を表すRange » VBAで行全体が選択されているかどうかを判定する