和風スパゲティのレシピ

日本語でコーディングするExcelVBA

セル範囲(Range)が行全体/列全体か判定する

セル範囲が行全体/列全体か判定する方法を紹介します。

セル範囲を含む行全体/列全体を取得するEntireプロパティを使い、
そのAddressが元のセル範囲のAddressと一致するかを判定します。

サンプルコード

If Selection.Address = Selection.EntireRow.Address Then
    MsgBox "現在行全体が選択されています。"
End If

If Selection.Address = Selection.EntireColumn.Address Then
    MsgBox "現在列全体が選択されています。"
End If

解説

RangeオブジェクトのEntireRow/EntireColumnプロパティを使用すると、
そのセル範囲を含む行全体/列全体を取得することができます。

これを利用し、そのAddressと元のセル範囲のAddressが等しいかを調べることで、
セル範囲(Rangeオブジェクト)が行/列全体を指しているかを判定します。

汎用関数化

特段長いコードという訳ではないですが、
こんなコードでも汎用関数化すると便利です。

' 行全体か調べる
Function Is行全体(ByVal 判定Range As Range) As Boolean
    Is行全体 = (判定Range.Address = 判定Range.EntireRow.Address)
End Function

' 列全体か調べる
Function Is列全体(ByVal 判定Range As Range) As Boolean
    Is列全体 = (判定Range.Address = 判定Range.EntireColumn.Address)
End Function
' 実行サンプル
If Is行全体(Selection) = False Then
   MsgBox "このマクロは行全体を選択して実行してください。"
End If

コードが簡単に書けるようになり、読みやすくなっているのもわかります。


こういった「簡単だけど書くのが面倒なコード」は、
汎用関数にして持っておきましょう。

詳しくはこちらの記事をどうぞ

https://www.limecode.jp/entry/guideline/utility-function