HOME > 即効テクニック > Excel VBA > > オートシェイプを作成する(AddShapeメソッド)

オートシェイプを作成する(AddShapeメソッド)|Excel VBA

図形操作関連のテクニック

オートシェイプを作成する(AddShapeメソッド)

(Excel 2000/2002/2003/2007/2010/2013/2016)

新しいオートシェイプを作成します。

構文 Object.AddShape(Type, Left, Top, Width, Height)

設定項目内容
ObjectShapesコレクションオブジェクト [省略不可]
Type作成するオートシェイプの種類を指定 [省略不可]
Leftオートシェイプの左端位置を指定 [省略不可]
Topオートシェイプの上端位置を指定 [省略不可]
Widthオートシェイプの幅を指定 [省略不可]
Heightオートシェイプの高さを指定 [省略不可]

次のサンプル1は、アクティブシートの指定したセル範囲の位置に新しいオートシェイプを作成します。

●サンプル1●

Sub AddShapeSamp1()
    With ActiveSheet.Range("B3:D10")
        ActiveSheet.Shapes.AddShape(Type:=msoShapeHeart, _
            Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height).Select
            '---B3:D10の範囲に、ハート形のオートシェイプを作成する
    End With
    
    Selection.Text = "モグタンだいすき!" & vbCrLf & "マコより"
End Sub

引数Typeで作成するオートシェイプの種類を指定します。このコードでは、ハート型の図形を作成します。作成する位置と大きさはLeft/Top/Width/Heightの4つの引数で指定します。使用する単位はポイントです。
対象文書の左上の位置を0とした座標上にて指定を行います。これはRangeオブジェクトのLeft/Top/Width/Heightプロパティと同じなので、Rangeオブジェクトを使用すると、作成する場所をイメージしやすいでしょう。

なお、引数Typeで指定するオートシェイプの種類はMsoAutoShapeTypeクラスの定数で指定します。次のサンプル2を実行すると、定数とその定数が示すオートシェイプの種類の一覧表をワークシートに作成します。

●サンプル2●

Sub AddShapeSamp2()
    Dim c As Range
    Dim myShape As Shape
    Dim i As Long

    Rows("2:140").RowHeight = 30      '---行の高さを30ポイントに指定
		
    On Error Resume Next '---作成できないオートシェイプがあるためエラー発生抑止

    For Each c In Range("A2:A140")    '---この位置にオートシェイプ作成する
        i = i + 1
        c.Offset(0, 1) = "Sample" & i '---B列にオートシェイプ名を入力
        c.Offset(0, 2) = i       '---C列にMsoAutoShapeTypeクラスの定数を入力
        
        Set myShape = ActiveSheet.Shapes.AddShape( _
              Type:=c.Offset(0, 2).Value, _
              Left:=3, _
              Top:=c.Top + 3, _
              Width:=c.Width - 6, _
              Height:=c.Height - 6) '---C列に指定したオートシェイプをA列に作成
               
        myShape.Name = c.Offset(0, 1).Value '---(1)オートシェイプに名前を付ける
    Next c

    ActiveSheet.Shapes("Sample10").Select   '---(2)つけた名前でオートシェイプを
                                            '      参照し、選択する
End Sub

なお、AutoShapeTypeプロパティを使用すると対象のオートシェイプの種類を変更することができます。その際に使用する定数は、AddShapeメソッドの引数Typeで指定するものと同じです。

●ポイント●

サンプル2では、(1)のステートメントで作成した図形に名前を付け、(2)のステートメントでそれを利用して特定の図形を参照しています。対象となる文書中に複数の図形が存在する可能性がある場合には、作成時に特定できる名前を付けておくと、後から図形を操作する際に便利です。