VBAでマクロを作成していると、「ユーザーがセル以外を選択している」状況に直面することがあります。たとえば、図形やグラフ、ボタンなどを選択している場合、通常の Selection.Address
を使うとエラーになります。
しかし、「直前に選択していたセル範囲」を取得する方法を知っていれば、そういった状況でも安全にセルアドレスを取得することができます。
本記事では、ActiveWindow.RangeSelection
を使って、セルが選択されていなくてもアドレスを取得する方法を丁寧に解説いたします。
目次
通常の方法ではエラーになるケース
以下のコードは、選択中のセルのアドレスを取得する一般的な方法です。
MsgBox Selection.Address
このコードは、セルを選択していれば問題なく動作しますが、図形や画像、グラフなどを選択している場合はエラーになります。
ActiveWindow.RangeSelection
を使う
このようなケースに対応するために使えるのが、以下のコードです。
MsgBox ActiveWindow.RangeSelection.Address
解説:
ActiveWindow.RangeSelection
は、「最後にセルとして選択されていた範囲」を表します。- 現在の選択が図形やボタンであっても、エラーなくセルアドレスを取得できます。
実行例
図形やボタンを選択中でも:
$C$3:$D$4
のように、直前に選択されていたセル範囲のアドレスが正常に表示されます。
注意点
ActiveWindow.RangeSelection
は「ウィンドウごとの情報」なので、複数のウィンドウがある場合には注意が必要です。- 必ずしも「今見えている範囲」と一致するとは限らないため、ユーザー操作を前提とした使い方が推奨されます。
まとめ
処理内容 | 使用する構文 | 特徴 |
---|---|---|
セル選択時のみアドレス取得 | Selection.Address | 通常はこちらを使用 |
セル以外を選択中でも取得 | ActiveWindow.RangeSelection.Address | 安全にアドレス取得が可能 |
Excelの操作状況に左右されず、安定してセルアドレスを取得したい場合には、ActiveWindow.RangeSelection
を使う方法が非常に有効です。
ユーザーが予期しない選択をしていても、マクロの安定性を保つことができるため、業務での利用にも安心して活用できます。