エクセルには簡単な図形を挿入するオートシェイプ機能が備わっていますが、それを 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) を指定しています。その他の引数は下図のようになっています。
図に示しているように、それぞれの長さは図形を囲むボックスに対して適用されるものです。楕円で幅と高さを等しく 50 に設定すると円となります。最後に縁取り線(枠線)を消すために Line プロパティを使って
Selection.ShapeRange.Line.Visible = msoFalse
と書いてあります。このように図形の性質を変えるには ShapeRange オブジェクトを持ってきてそのプロパティを変更します。次回記事では ShapeRange オブジェクトにはたらきかけて図形の色を変化させるマクロを作ってみます。
【次の記事】≫ 赤青緑を無作為に表示します
エクセルや数学に関するコメントをお寄せください