Excel VBAでマクロを実行する際、ユーザーがセルを選択していない状態で実行されると、エラーや意図しない動作が発生する可能性があります。
本記事では、「セルが選択されているかどうか」を判定し、選択されている場合にのみそのアドレスを取得する方法について、実用的なコードとともに丁寧に解説いたします。
セルが選択されているかどうかを確認するには?
VBAでは、現在選択されているオブジェクトがセル範囲(Range)であるかどうかを調べるために、TypeName(Selection)
を使用します。
以下のコードをご覧ください。
If TypeName(Selection) = "Range" Then
MsgBox "選択セル範囲: " & Selection.Address
Else
MsgBox "セルが選択されてません。"
End If
コードの説明
TypeName(Selection)
→ 現在の選択が何のオブジェクトであるかを文字列で返します。たとえば、セルを選択していれば"Range"
、図形なら"Picture"
などが返ります。Selection.Address
→ 選択されているセル範囲のアドレス(例:”$A$1:$B$3″)を取得します。MsgBox
→ 条件に応じて、選択セルのアドレス、または「セルが選択されていません」というメッセージを表示します。
実行結果の例
セルを選択している場合:
選択セル範囲: $C$2:$D$4
図形やグラフなどを選択している場合:
セルが選択されてません。
応用例:空白セルの選択を除外するには?
選択セルが空白かどうかも判定したい場合は、以下のように条件を追加できます。
If TypeName(Selection) = "Range" Then
If WorksheetFunction.CountA(Selection) > 0 Then
MsgBox "選択されたセル範囲:" & Selection.Address
Else
MsgBox "選択範囲は空白です。"
End If
Else
MsgBox "セルが選択されていません。"
End If
目次
まとめ
処理内容 | 使用するVBA関数・構文 |
---|---|
選択オブジェクトの型判定 | TypeName(Selection) |
セル範囲かどうかの判定 | "Range" かどうかで判断 |
アドレスの取得 | Selection.Address |
空白セル判定(任意) | WorksheetFunction.CountA() |
セルが選択されているかどうかを安全に判定することで、ユーザーの操作ミスを回避し、安定したマクロ動作が実現できます。
特に業務で他の方がマクロを使用する場合、このようなチェックは非常に重要です。