セル範囲が行全体/列全体か判定する方法を紹介します。
セル範囲を含む行全体/列全体を取得する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
コードが簡単に書けるようになり、読みやすくなっているのもわかります。
こういった「簡単だけど書くのが面倒なコード」は、
汎用関数にして持っておきましょう。
詳しくはこちらの記事をどうぞ