図形(オートシェイプ)を追加

中級VBA

VBAで図形(オートシェイプ)を追加する方法

 ExcelVBAで図形に関する操作は、Shapeオブジェクトを使います。
 Shapeオブジェクトにはたくさんのプロパティやメソッドがあります。
 今回は、マクロの記録を使って必要なプロパティやメソッドを見つけて使用する方法を見ていきます。

マクロの記録でコードを見る

 図形を追加するコードを見るため、マクロの記録を準備します。メニューの「開発」から「マクロの記録」をクリックするとそれ以降の操作をプログラムコードで示してくれます。
 今回は、メニューから「挿入」>「図形」>「正方形」を選択して、シート上でドラッグして図形を表示させます。

 書き出されたコードは以下のようになりました。数字の部分はドラッグした位置で変わります。

Sub Macro1()
'
' Macro1 Macro
'
    ActiveSheet.Shapes.AddShape(msoShapeRectangle, 100.5, 80, 111.5, 65).Select
End Sub

 図形を追加するには、ShapeオブジェクトのAddShapeメソッドを使用します。
 「.Select」は余計なので削除します。
 ただ、削除しただけでは文法エラーとなります。
 メソッドの実行なので、以下のように Call を付けるか ( ) を取り除きます。

    Call ActiveSheet.Shapes.AddShape(msoShapeRectangle, 100.5, 80, 111.5, 65)

    ActiveSheet.Shapes.AddShape msoShapeRectangle, 100.5, 80, 111.5, 65

AddShapeメソッド

 AddShapeメソッドでは、以下のような引数を取ります。

    AddShape (図形の種類、 左位置、 上位置、 幅、 高さ)

 図形の種類は、たくさんありますが今回の正方形は、msoShapeRectangleです。
 これに関しては、マクロの記録で実際に再現すればすぐに判明します。

 次の4つは、位置や長さですが、単位はポイントを使います。
 ポイントとは、1ポイント=1/72インチで、10ポイントで約3.5ミリとなります。

 位置関係は以下の通りです。

プロパティを設定する

 今度は楕円を追加して塗りつぶし色縁取りの色縁取り幅を変更してみます。

 マクロの記録が吐き出したコードは以下の通りです。

Sub Macro2()
'
' Macro2 Macro
'
    ActiveSheet.Shapes.AddShape(msoShapeOval, 80, 18, 92, 88.5).Select
    With Selection.ShapeRange.Line
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 0, 0)
        .Transparency = 0
    End With
    With Selection.ShapeRange.Fill
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 255, 0)
        .Transparency = 0
        .Solid
    End With
    With Selection.ShapeRange.Line
        .Visible = msoTrue
        .Weight = 2
    End With
End Sub

 では余計な部分をカットしていきます。上記で下線を引いた部分が対象となります。
Selection や デフォルトの設定などをカットしていきます。

Sub Macro2変更()
    With ActiveSheet.Shapes.AddShape(msoShapeOval, 80, 18, 92, 88.5)
        .Line.ForeColor.RGB = RGB(255, 0, 0)      '枠線色指定
        .Fill.ForeColor.RGB = RGB(255, 255, 0)    '塗りつぶし色指定
        .Line.Weight = 2                          '枠線幅指定
    End With
End Sub

 マクロの記録からプログラムコードを生成する方法については、これまで何度が示してきましたが、初心者の方には少々難しく感じるかもしれません。ただ、慣れてくれば結構便利に使えますので、今回の例などを参考にして頑張ってみてください。

タイトルとURLをコピーしました