「vba 選択セル 取得」
「excel vba 選択中のセル 取得」
「vba 選択されている全てのセルを取得」
といった検索キーワードをキッカケに、WindowオブジェクトのRangeSelectionプロパティで、選択されているセルを表すRangeオブジェクトを取得できることをご紹介しました。
Selectionプロパティで選択されているセル範囲を取得する
Window.RangeSelectionプロパティよりも、選択されているセルへの参照を取得するのに、もっと使われるプロパティがあります。
マクロ記録機能で自動的に作られるコードでもよく登場する、Selectionプロパティです。
Selectionプロパティで選択されているセルを取得するサンプルマクロ
以下のSubプロシージャを実行すると、選択されているセル範囲のアドレスがメッセージボックスに表示されます。If TypeName(Selection) <> "Range" Then Exit Sub
MsgBox Selection.Address(False, False)
End Sub
Selectionは実行されるまで何を返すかわからない
Selectionプロパティは、選択されているものを表すオブジェクトを返すプロパティで、何が返されるかは実行してみない限りはわかりません。
例えば、図形が選択されているときに、
MsgBox Selection.Address(False, False)
が実行されると、実行時エラーが発生してしまいます。
AddressはRangeオブジェクトに用意されているプロパティであるにも関わらず、図形が選択されているのでRangeオブジェクトを取得できないためです。
これを避けるためにTypeName関数を使って、選択されているものがRangeオブジェクトであることを事前に確認する、
If TypeName(Selection) <> "Range" Then Exit Sub
が入っています。
ちなみに、ご紹介済みのWindowオブジェクトのRangeSelectionプロパティの場合、必ずRangeオブジェクトを返すので、このような処理は不要です。
Selectionはグローバルメンバー
Selectionプロパティは、ApplicationオブジェクトやWindowオブジェクトに用意されているプロパティですが、グローバルメンバーですから、上位のオブジェクト式は省略して書かかれるのが一般的です。
Selectionで選択されているセルを取得して順番に処理するサンプルマクロ
選択されているすべてのセルを取得して、順番に処理をしたいということであれば、以下のようなSubプロシージャです。
Dim rng As Range If TypeName(Selection) <> "Range" Then Exit Sub
For Each rng In Selection
MsgBox rng.Address(False, False)
Next rng
End Sub
「vba 選択セル範囲を for each で取得する」
という検索をなさった方には、このプロシージャが参考になるでしょう。
上記のプロシージャを実行すると、選択されているセルのアドレスが順番にメッセージボックスに表示されます。
Selectionプロパティは、複数セルが選択されていれば、コレクションとしてのRangeオブジェクトを返します。コレクションとしてのRangeオブジェクトに含まれる個々のRangeオブジェクトをFor Each~Nextループで処理しています。
最終更新日時:2019-01-09 12;02
Home » Excel VBA Rangeオブジェクト » 選択セルを取得する-Selectionプロパティ