【VBA】セルが選択されていないときでもアドレスを取得する方法

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 を使う方法が非常に有効です。
ユーザーが予期しない選択をしていても、マクロの安定性を保つことができるため、業務での利用にも安心して活用できます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次