Home » ExcelVBA Rangeオブジェクト » 選択セルを取得する-Selectionプロパティ

選択セルを取得する-Selectionプロパティ

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

「vba 選択セル 取得」
「excel vba 選択中のセル 取得」
「vba 選択されている全てのセルを取得」
といった検索キーワードをキッカケに、WindowオブジェクトのRangeSelectionプロパティで、選択されているセルを表すRangeオブジェクトを取得できることをご紹介しました。

Selectionプロパティで選択されているセル範囲を取得する

Window.RangeSelectionプロパティよりも、選択されているセルへの参照を取得するのに、もっと使われるプロパティがあります。

選択セルを取得する-Selectionプロパティ

マクロ記録機能で自動的に作られるコードでもよく登場する、Selectionプロパティです。

[スポンサードリンク]

Selectionプロパティで選択されているセルを取得するサンプルマクロ

以下のSubプロシージャを実行すると、選択されているセル範囲のアドレスがメッセージボックスに表示されます。
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プロシージャです。

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ループで処理しています。

関連語句
Visual Basic for Applications

最終更新日時:2019-01-09 12;02

[スポンサードリンク]

Home » ExcelVBA Rangeオブジェクト » 選択セルを取得する-Selectionプロパティ

「ExcelVBA Rangeオブジェクト」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.