複数のシェイプのグループ化
ワークシート上に配置された複数の図形やワードアート、線、矢印などのシェイプは、配置した後にグループ化することで相対的な位置を保つことができ一つのシェイプとして扱うことができて大変便利です。
Excelの操作の場合、「Ctrl」【コントロール】キーを押しながらマウスの「左ボタン」で各シェイプを選択しマウス「右ボタン」でメニューからグループ化を行いますが、シェイプが重なっていたり、数が多い場合は手間がかかりますし、失敗することも多いと思います。
VBAでは、ShapeRenge【シェイプレンジ】コレクションGroup【グループ】メソッドを使用して、複数のシェイプを一つのシェイプとしてグループ化します。
アクティブシート上の複数のシェイプをグループ化するコードと解説
Sub グループ化() Dim 名前 As String On Error GoTo エラー処理 名前 = InputBox("シェイプのグループ名を入力してください。") ActiveSheet.Shapes.SelectAll Selection.ShapeRange.Group.Name = 名前 MsgBox 名前 & "という名前でグループ化しました。" Exit Sub エラー処理: MsgBox "グループ化するには2個以上のシェイプが必要です、" End Sub
InputBox【インプットボックス】関数でユーザーから受け取るグループの名前を格納する変数「名前」を文字列型(string)で宣言します。
3行目【On Error GoTo エラー処理】
On Error【オンエラー】ステートメントを使用して、シェイプが1つしかなかった場合、Group【グループ】メソッドはエラーになるので、エラーが発生した場合に実行がストップしないようにGoTo【ゴートゥ】ステートメントでラベルで指定した「エラー処理」の位置(9行目)までジャンプします。
4行目【名前 = InputBox(“シェイプのグループ名を入力してください。”)】
InputBox【インプットボックス】関数を使用してユーザーにシェイプにグループ名を入力してもらいその値を「変数名前」に代入します。
5行目【ActiveSheet.Shapes.SelectAll】
アクティブシートの複数のシェイプを表すShapes【シェイプス】コレクションに対してSelectAll【セレクトオール】メソッドですべてのシェイプを選択します。Shapes【シェイプス】コレクションはGroup【グループ】メソッドを持たないので直接、Group【グループ】メソッドは使用できません。
6行目【Selection.ShapeRange.Group.Name = 名前】
Selection【セレクション】プロパティで現在選択されているシェイプを参照して、選択されているシェイプの範囲をShapeRange【シェイプレンジ】コレクションで取得し、Group【グループ】メソッドで複数のシェイプを一つにまとめます。Shape【シェイプ】オブジェクトが返されるので、それに対しName【ネーム】プロパティで「変数名前」に格納された値を設定します。
7行目【MsgBox 名前 & “という名前でグループ化しました。”】
MsgBox【メセージボックス】関数を利用してグループ化したことをユーザーに伝えます。
8行目【Exit Sub】
エラーが発生せずに、シェイプのグループ化が出来た場合は、Exit【エグジット】ステートメントで処理を終了します。
9行目、10行目【エラー処理:
MsgBox “グループ化するには2個以上のシェイプが必要です、”】
エラーが発生したとき、つまり、シェイプが一つしかなかった場合MsgBox【メッセージボックス】関数を使用してユーザーにメッセージを表示します。
グループ化を解除する場合は、グループ化されたシェイプを選択状態にしてマウス右ボタンでメニューを表示し「グループ解除」をできますが、簡単なので、グループ解除のコードもご紹介します。同じ標準モジュール内に記述しておくと良いと思います。
シェイプのグループ解除のコード例
Sub グループ解除() ActiveSheet.Shapes.SelectAll Selection.Ungroup End Sub
以上で、複数の図形(シェイプ)をグループ化するについての解説を終了します。ありがとうございました。