オートシェイプを作成する(AddShapeメソッド)|Excel VBA |
新しいオートシェイプを作成します。
構文 Object.AddShape(Type, Left, Top, Width, Height)
設定項目 | 内容 |
---|---|
Object | Shapesコレクションオブジェクト [省略不可] |
Type | 作成するオートシェイプの種類を指定 [省略不可] |
Left | オートシェイプの左端位置を指定 [省略不可] |
Top | オートシェイプの上端位置を指定 [省略不可] |
Width | オートシェイプの幅を指定 [省略不可] |
Height | オートシェイプの高さを指定 [省略不可] |
次のサンプル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を実行すると、定数とその定数が示すオートシェイプの種類の一覧表をワークシートに作成します。
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)のステートメントでそれを利用して特定の図形を参照しています。対象となる文書中に複数の図形が存在する可能性がある場合には、作成時に特定できる名前を付けておくと、後から図形を操作する際に便利です。