[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 オブジェクトにはたらきかけて図形の色を変化させるマクロを作ってみます。

【次の記事】≫ 赤青緑を無作為に表示します

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