Home > 即効テクニック > Excel VBA > 図形操作関連のテクニック > オートシェイプを作成する(AddShapeメソッド)

即効テクニック

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

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

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


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


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


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


●サンプル1●

Sub AddShapeSamp1()

    With ActiveSheet.Range("B3:D8")
        ActiveSheet.Shapes.AddShape(Type:=msoShapeHeart, _
            Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height).Select
            '---B3:D8の範囲に、ハート形のオートシェイプを作成する
    End With

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

    On Error Resume Next   '---作成できないオートシェイプがあるためエラー発生抑止
    For Each c In Range("A2:A140")   '---この位置にオートシェイプ作成する
        Set myShape = ActiveSheet.Shapes.AddShape( _
               Type:=c.Offset(, 2).Value, _
               Left:=3!, Top:=c.Top + 3!, _
               Width:=c.Width - 6!, Height:=c.Height - 6!)
               '---cの2列分横のセルに、定数の示す値が入力されている
               '---cの中央付近にオートシェイプを作成する
        myShape.Name = c.Offset(, 1).Value  '---(1)オートシェイプに名前を付ける
    Next c
    ActiveSheet.Shapes("msoShapeActionButtonHome").Select
    '---(2)つけた名前でオートシェイプを参照し選択している

End Sub


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


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