Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : 指定なし)
図形のグループ化
投稿日時: 20/01/29 12:01:58
投稿者: nabe3

任意の複数の図形をグループ化したい。

回答
投稿日時: 20/01/29 12:21:26
投稿者: takesi

 
VBA セルの座標を取得する Top・Left・Height・Width プロパティ
Excel VBA 図形(シェイプ)の設定や操作をするプロパティとメソッド
Shape種別を判定するTypeプロパティで取得できる定数の一覧
オートシェイプのオブジェクトを取得する方法
 
上記のサイトを参照すれば目的達成できると思います。

回答
投稿日時: 20/01/29 12:46:41
投稿者: mattuwan44

>任意の複数の図形をグループ化したい。
 
任意ってどうやって選ぶんですか?
 
で、マクロ化するにあたってどこで躓いてますか?

投稿日時: 20/01/29 13:06:16
投稿者: nabe3

任意 は間違いです。
 
図形を作成するマクロを作成しました。
作成するシートにはマクロを起動するボタンも並んでいます。
 
マクロを起動すると以前に作成した図形を削除し
複数個の図形を新規に作成します。
 
この新規に作成した図形をグループ化したいのです。
図形は円であったり四角形であったりさまざまです。

回答
投稿日時: 20/01/29 13:32:04
投稿者: WinArrow
投稿者のウェブサイトに移動

Excelのバージョンが選択されていませんが、
 
コード例
全ての図形を対象にするならば
    ActiveSheet.DrawingObjects.Group
 
 

回答
投稿日時: 20/01/29 14:02:50
投稿者: sk

引用:
複数個の図形を新規に作成します。
  
この新規に作成した図形をグループ化したいのです。

ShapeRange オブジェクトの Group メソッドを使用なさればよろしいかと。
 
(標準モジュール)
-------------------------------------------------------------------
Sub CreateGroupedShapes()
     
    Dim ws As Excel.Worksheet
    Dim shp As Excel.Shape
     
    Dim i As Long
    Dim aryShapeNames() As Variant
     
    Application.ScreenUpdating = False
     
    Set ws = ActiveSheet
     
    For i = 0 To 2
        Set shp = ws.Shapes.AddTextbox(msoTextOrientationHorizontal, 0, i * 20, 100, 20)
        With shp
            .TextFrame2.TextRange.Text = .Name
            ReDim Preserve aryShapeNames(0 To i)
            aryShapeNames(i) = shp.Name
        End With
        Set shp = Nothing
    Next
     
    Set shp = ws.Shapes.Range(aryShapeNames).Group
     
    With ws.Cells(5, 5)
        shp.Top = .Top
        shp.Left = .Left
        shp.Select
    End With
     
    Application.ScreenUpdating = True
     
    MsgBox Join(aryShapeNames, ",") & " を新規作成し、グループ化して " & shp.Name & " にしました。"
     
    Set shp = Nothing
    Set ws = Nothing
     
End Sub
-------------------------------------------------------------------

投稿日時: 20/01/30 07:01:51
投稿者: nabe3

解決しました。
ありがとうございました。