Excel VBA 複数の図形(シェイプ)をグループ化する

スポンサーリンク
スポンサーリンク

複数のシェイプのグループ化

ワークシート上に配置された複数の図形やワードアート
線、矢印などのシェイプは、配置した後に
グループ化することで相対的な位置を保つことができ
一つのシェイプとして扱うことができて大変便利です。

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

コードの解説

2行目
Dim 名前 As String
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

以上で
複数の図形(シェイプ)をグループ化するについての解説を終了します。
ありがとうございました。

スポンサーリンク
スポンサーリンク

フォローする

スポンサーリンク
スポンサーリンク