Home » エクセルマクロ・Excel VBAの使い方 » DrawingObjects » VBAで複数の図形が選択されているかを判定する

VBAで複数の図形が選択されているかを判定する

動作検証バージョン:64bit Windows 10 Pro + 32bit Excel(バージョン2108 ビルド14326.20238 Microsoft Store)

Excel.ShapeRange.Count

「excel vba selection 図形複数 判定」
という検索キーワードで、アクセスがありました。

Excel VBAで、図形が複数選択されているかどうかを判定するには、どのようなコードを書けばいいのかを探していた方による検索です。

ここで「図形」と表現されているのが、本当は何を意味しているのかによって、判定ロジックの複雑さが変わってきます。

[スポンサードリンク]

複数のShapeが選択されているかどうかを判定するサンプル

この記事では、「図形」をShapeオブジェクトと同等の操作対象と解釈した、比較的シンプルなコードをご紹介しておきます。

Sub 複数の図形が選択されているか判定する()
On Error GoTo ErrHandl

 If Selection.ShapeRange.Count = 1 Then
  MsgBox "図形が1つだけ選択されています。"
 Else
  MsgBox "複数の図形が選択されています。"
 End If

Exit Sub
ErrHandl:
 MsgBox "図形は選択されていません。"
End Sub

サンプルマクロで行っている処理について

Excel VBAのSelectionプロパティは、何が選択されているかによって、戻り値が変化する決して易しくはないプロパティです。

オブジェクトブラウザーの詳細ペイン1行目には戻り値が「As Object」と表示されています。

Excel.Global.Selection

Selectionプロパティは、セルが選択されていればRangeオブジェクトを返しますが、図形が選択されている場合には図形の種類によって戻り値はさまざまです。Rectangleだったり、Ovalだったり、DrawingObjectsだったり。

図形と同等の対象が選択されていればShapeRangeが使える

ただし、図形と同等の操作対象が選択されているときに、Selectionプロパティが返すオブジェクトは、ShapeRangeオブジェクトが戻り値であるShapeRangeプロパティを持っています。

そして、Selection.ShapeRangeプロパティで取得できるShapeRangeオブジェクトは、ShapesコレクションとShapeオブジェクトの特徴を併せ持ったオブジェクトですから、要素の個数を返すCountプロパティが用意されています。

Excel.ShapeRange.Count

このShapeRange.Countを使って、複数の図形が選択されているかどうかを判定しているのが上記SubプロシージャのIf文です。

On Error GoToを入れている理由

ただし、セルが選択されている場合や、何も選択されていないような場合には、「Selection.ShapeRange」は実行時エラーになってしまいます。

そのため、上記のSubプロシージャでは「On Error GoTo ErrHandl」を入れています。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » DrawingObjects » VBAで複数の図形が選択されているかを判定する

「DrawingObjects」の記事一覧

検索


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

.