PR

【VBA】図形のグループ化/解除、再グループ化を行う

これで楽に!?VBA活用
記事内に広告が含まれています。

こんにちは、Ryoです。
用途によっては指定した図形をグループ化、または解除や再グループ化などの処理が必要になることもあるかと思います。今回はそれらについてGroup/Ungroupe、Regroupメソッドを使用した処理方法について書いていきたいと思います。

スポンサーリンク

1.サンプル概要

サンプルとしてワークシートSheet1上に以下画像の図形を準備し、手動でグループ化して「Group1」と名前設定しています。

この「Group1」に対しUngroupメソッドを使用することでグループ化を解除できます。下の画像は解除されていることを視覚的に表現する為に個々を選択した状態にしています。

解除した後、Sheet1上の2番目と3番目の図形(右矢印と上矢印)を指定しグループ化させて「Group2」に名前を設定します。

また、グループ化された「Group1」を解除した後、再グループ化して名前を「reGroup1」と設定する内容についても書いていきます。

以上がサンプル概要になります。

2.サンプルコード

◆グループ化/グループ化解除

Sub Sample1()

  With Worksheets("Sheet1")
      'グループ化されている図形群「Group1」のグループ解除
      .Shapes("Group1").Ungroup
      '「Sheet1」上の2番目と3番目の図形をグループ化し、
      '名前を「Group2」として設定する
      .Shapes.Range(Array(2, 3)).Group.Name = "Group2"
  
      '***参考*******************
      '対象の図形に名前を付け、その名前を以下のように
      '指定する形でも可
      '.Shapes.Range(Array("Arrow1", "Arrow2")). _
      '  Group.Name = "Group2"
      '************************
      
  End With

End Sub

コードを実行する前提条件としては対象シートのSheet1上にグループ化された図形群「Group1」が存在することとしています。

その条件で実行すると「Gruop1」に対しUngroupメソッドが実行されてグループ化が解除されます。次にSheet1上の2番目と3番目の図形を指定してGroupメソッドでグループ化とNameプロパティを利用した名前設定(Group2)を行うものです。

構文:オブジェクト.Group/Ungroup

Groupメソッドはグループ化、Ungroupメソッドはグループ化解除を行います。

後はサンプルコード内のコメントにも書いていますが、図形を指定する際に対象図形の名前を指定しても処理できますので、ご参考までに。

.Shapes.Range(Array(“Arrow1”, “Arrow2”)).
_ Group.Name = “Group2”

◆再グループ化

Sub Sample2()
'***再グループ化処理***

  With Worksheets("Sheet1")
      'グループ化されている「Group1」を解除
      .Shapes("Group1").Ungroup
      '1番目の図形を再グループ化し、名前を「reGroup1」とする
      .Shapes.Range(1).Regroup.Name = "reGroup1"
  End With

End Sub

こちらのサンプルも同様の前提条件として、対象シートのSheet1上にグループ化された図形群「Group1」が存在することとしています。

Ungroupメソッドで解除された後、ShapesRangeコレクションで1番目の図形を指定し、その図形に対してグループ化されていた状態を復元します。

後はNameプロパティを使用して「reGroup1」の名前設定も実行しています。

3.まとめ

処理を行う中で視覚的に表現したいような場合に図形を用いることが多々ありますので、そのような際に用途によっては今回のグループ化関連の処理も必要になるケースもあるかと思います。



処理自体は特に難しいこともありませんが、複数の図形が混在するようなケースでは図形に名前を設定して扱う方が処理しやすいです。

以上、図形のグループ化/解除、再グループ化を行う方法についてでした!今回の記事が何かの参考になれば幸いです。

Ryo

タイトルとURLをコピーしました