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

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

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

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

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

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

Selectionプロパティです。

[スポンサードリンク]

選択されているセルを取得するサンプルマクロ

以下のSubプロシージャを実行すると、選択されているすべてのセルのアドレスがメッセージボックスに表示されます。


Sub 選択されている全てのセルを取得する()
 If TypeName(Selection) <> "Range" Then Exit Sub
 MsgBox Selection.Address(False, False)
End Sub

Selectionプロパティは、選択されているものを表すオブジェクトを返すプロパティで、何が返されるかは実行してみない限りはわかりません。

例えば、図形が選択されているときに、
  MsgBox Selection.Address(False, False)
が実行されると、実行時エラーが発生してしまいます。
AddressはRangeオブジェクトに用意されているプロパティであるにも関わらず、図形が選択されているのでRangeオブジェクトを取得できないためです。

これを避けるためにTypeName関数を使って、選択されているものがRangeオブジェクトであることを事前に確認する、
  If TypeName(Selection) <> "Range" Then Exit Sub
が入っています。

なお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

上記のプロシージャを実行すると、選択されているセルのアドレスが順番にメッセージボックスに表示されます。

Selectionプロパティは、複数セルが選択されていれば、コレクションとしてのRangeオブジェクトを返します。コレクションとしてのRangeオブジェクトに含まれる個々のRangeオブジェクトをFor Each~Nextループで処理しています。

「vba 選択セル範囲を for each で取得する」
という検索をなさった方には、このプロシージャが参考になるでしょう。

関連語句
Visual Basic for Applications
[スポンサードリンク]

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

TrackBack:1

TrackBack URL
CurrentRegionのセル番地を取得する from インストラクターのネタ帳
Range.Addressプロパティを使うと、CurrentRegionのセル番地も取得できます。
[スポンサードリンク]

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

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

検索

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

.