Home » Excel VBA Rangeオブジェクト » VBAで複数のセル範囲が選択されているかを判定する

VBAで複数のセル範囲が選択されているかを判定する

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

何を求めていらしたのか判断に迷いますが、
「複数の範囲の判定vba」
という検索キーワードに気づきました。

可能性はいくつも考えられますが、

VBAで複数のセル範囲が選択されているかを判定する

上図のような、複数のセル範囲が選択されているかどうかを判定するコードをご紹介しておきます。

[スポンサードリンク]

複数のセル範囲が選択されているかを判定するサンプルマクロ

以下のようなプロシージャで、複数のセル範囲が選択されているかを判定できます。
Sub 複数のセル範囲が選択されているかを判定する()
 If Selection.Areas.Count = 1 Then
  MsgBox "1つのセル範囲が選択されています。"
 Else
  MsgBox "複数のセル範囲が選択されています。"
 End If
End Sub

VBAで複数のセル範囲が選択されているかを判定する

上図のような範囲選択なら
「1つのセル範囲が選択されています。」
下図のような範囲選択なら
「複数のセル範囲が選択されています。」
とメッセージが表示されます。

VBAで複数のセル範囲が選択されているかを判定する

RangeオブジェクトのAreasプロパティについて

もちろん、ポイントは、
  If Selection.Areas.Count = 1 Then
です。

この「.Areas」は、Rangeオブジェクトのプロパティです。

VBAで複数のセル範囲が選択されているかを判定する

RangeオブジェクトのAreasプロパティは、選択範囲の一塊を1つのItemとして持つ、コレクションオブジェクトとしてのRangeを返します。

Range.Areaプロパティの挙動を確認するサンプルマクロ

説明を読んだだけでは、なかなか理解できないでしょうから、以下のSubプロシージャを実行してみてください。
Sub Areasプロパティの動きを確認する()
 Dim rng As Range
 For Each rng In Selection.Areas
  MsgBox rng.Address(False, False)
 Next rng
End Sub

例えば、A1:B2セルと、C4:C6セルが選択されているときに、

VBAで複数のセル範囲が選択されているかを判定する

上記のプロシージャを実行すると、
  「A1:B2」
  「C4:C6」
とメッセージボックスが2回表示されます。

A1:B2セルと、C4:C6セルが選択されているときには、A1:B2セル・C4:C6セルそれぞれを単独オブジェクトとして持つコレクションオブジェクトとしてのRangeを返すので、上記のプロシージャでメッセージボックスが2回表示されます。

一方、セル範囲・A1:C6だけが選択されている場合には、
  「A1:C6」
というメッセージボックスだけが表示されます。

これが、RangeオブジェクトのAreasプロパティです。

[スポンサードリンク]

Home » Excel VBA Rangeオブジェクト » VBAで複数のセル範囲が選択されているかを判定する

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

検索


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

.