「excel vba selection 図形複数 判定」
という検索キーワードで、アクセスがありました。
Excel VBAで、図形が複数選択されているかどうかを判定するには、どのようなコードを書けばいいのかを探していた方による検索です。
ここで「図形」と表現されているのが、本当は何を意味しているのかによって、判定ロジックの複雑さが変わってきます。
複数のShapeが選択されているかどうかを判定するサンプル
この記事では、「図形」をShapeオブジェクトと同等の操作対象と解釈した、比較的シンプルなコードをご紹介しておきます。
On Error GoTo ErrHandl
If Selection.ShapeRange.Count = 1 Then
MsgBox "図形が1つだけ選択されています。"
Else
MsgBox "複数の図形が選択されています。"
End If
ErrHandl:
MsgBox "図形は選択されていません。"
End Sub
サンプルマクロで行っている処理について
Excel VBAのSelectionプロパティは、何が選択されているかによって、戻り値が変化する決して易しくはないプロパティです。
オブジェクトブラウザーの詳細ペイン1行目には戻り値が「As Object」と表示されています。
Selectionプロパティは、セルが選択されていればRangeオブジェクトを返しますが、図形が選択されている場合には図形の種類によって戻り値はさまざまです。Rectangleだったり、Ovalだったり、DrawingObjectsだったり。
図形と同等の対象が選択されていればShapeRangeが使える
ただし、図形と同等の操作対象が選択されているときに、Selectionプロパティが返すオブジェクトは、ShapeRangeオブジェクトが戻り値であるShapeRangeプロパティを持っています。
そして、Selection.ShapeRangeプロパティで取得できるShapeRangeオブジェクトは、ShapesコレクションとShapeオブジェクトの特徴を併せ持ったオブジェクトですから、要素の個数を返すCountプロパティが用意されています。
このShapeRange.Countを使って、複数の図形が選択されているかどうかを判定しているのが上記SubプロシージャのIf文です。
On Error GoToを入れている理由
ただし、セルが選択されている場合や、何も選択されていないような場合には、「Selection.ShapeRange」は実行時エラーになってしまいます。
そのため、上記のSubプロシージャでは「On Error GoTo ErrHandl」を入れています。
Home » エクセルマクロ・Excel VBAの使い方 » DrawingObjects » VBAで複数の図形が選択されているかを判定する