当サイトではアフィリエイトプログラムを利用して商品を紹介しています。

【VBA】ShapesコレクションとAddShapeメソッド

エクセルには簡単な図形を挿入するオートシェイプ機能が備わっていますが、それを VBA で制御してみます。単に図を挿入するだけならかえって手間になってしまうので意味がないように思えますが、これを応用するとちょっとした動的グラフィックスなどを作って(落下運動などの)物理学シミュレーションなどもできるようになるので、基本を知っておいて損はありません。

【VBA】ShapesとAddShapeで図形を挿入します

ワークシート上に円を挿入するマクロを作成します。

'[VBA] シートに円を表示するプロシージャ

Sub Make_Circle()

  '開いているシートに円を挿入
  ActiveSheet.Shapes.AddShape(msoShapeOval, 100, 100, 50, 50).Select

  '円の縁取り線を消す
  Selection.ShapeRange.Line.Visible = msoFalse

End Sub

Make_Circle() を実行すると縁取り線のない円が表示されます。上のコードでは、Shapesプロパティで Shapes コレクションを参照し、AddShapeメソッドで新しい図形を追加しています。

ActiveSheet.Shapes.AddShape(msoShapeOval, 100, 100, 50, 50).Select

AddShape メソッドの引数は次のような形で指定するようになっています。

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

Type は図形の種類で、今は楕円 (msoShapeOval) を指定しています。その他の引数は下図のようになっています。

VBAオートシェイプで円を挿入

図に示しているように、それぞれの長さは図形を囲むボックスに対して適用されるものです。楕円で幅と高さを等しく 50 に設定すると円となります。最後に縁取り線(枠線)を消すために Line プロパティを使って

Selection.ShapeRange.Line.Visible = msoFalse

と書いてあります。このように図形の性質を変えるには ShapeRange オブジェクトを持ってきてそのプロパティを変更します。次回記事では ShapeRange オブジェクトにはたらきかけて図形の色を変化させるマクロを作ってみます。

エクセルや数学に関するコメントをお寄せください