「vba 選択セル 取得」
「excel vba 選択中のセル 取得」
「vba 選択されている全てのセルを取得」
といった検索キーワードで、このサイト『インストラクターのネタ帳』へのアクセスが時折あります。
Excel VBA(Visual Basic for Applications)で、選択されているすべてのセルを表すRangeオブジェクトを取得するコードを探していた方による検索です。
Window.RangeSelectionプロパティで選択セルを取得できる
Windowオブジェクトに用意されているRangeSelectionプロパティを利用するのが、
ひとつの方法です。
Window.RangeSelectionで選択されているセルを取得するサンプル
以下のSubプロシージャを実行すると、選択されているセル範囲のアドレスがメッセージボックスに表示されます。
MsgBox _
ActiveWindow.RangeSelection.Address(False, False)
End Sub
ActiveWindowプロパティで、アクティブなウィンドウを表すWindowオブジェクトを取得して、
WindowオブジェクトのRangeSelectionプロパティを使って、選択されているすべてのセルを表すRangeオブジェクトを取得して、
RangeオブジェクトのAddressプロパティを使って、選択されている全セルのアドレスを取得しています。
RangeSelectionプロパティはグローバルメンバーではない
RangeSelectionプロパティは、上位のオブジェクト式を省略できるグローバルメンバーではなく、Windowオブジェクトにだけ用意されているプロパティです。
ですから上記のプロシージャで利用しているActiveWindowプロパティのような、Windowオブジェクトを取得するコードに続けて記述する必要があります。
Window.RangeSelectionで選択セルを取得して順番に処理するサンプル
選択されているすべてのセルを取得して、順番に処理をしたいということであれば、以下のSubプロシージャが参考になるでしょう。
Dim rng As Range
For Each rng In ActiveWindow.RangeSelection
MsgBox rng.Address(False, False)
Next rng
End Sub
上記のSubプロシージャを実行すると、選択されているセルのアドレスが、順番にメッセージボックスに表示されます。
オブジェクト式「ActiveWindow.RangeSelection」は、複数セルが選択されていれば、コレクションとしてのRangeオブジェクトを返します。コレクションとしてのRangeオブジェクトに含まれる個々のRangeオブジェクトをFor Each~Nextループで処理しているのが上記のSubプロシージャです。
最終更新日時:2019-01-21 14:49
Home » エクセルマクロ・Excel VBAの使い方 » Windowオブジェクト » 選択セルを取得する-RangeSelectionプロパティ