Excel VBA(マクロ)で図形を作成する方法/AddShapeメソッドの使い方

IT

AddShapeはShapesコレクションのメソッドで、ワークシートに図形を作成し、同時にShapeオブジェクトを返します。

スポンサーリンク

AddShapeメソッドの使い方

図形の作成
Shapes.AddShape(Type,Left,Top,Width,Height)
とりあえず書いてみます。図形の種類は数字でも指定できます。
vba addshape1
ただし、ActiveSheet.Shapes.AddShape(1, 100, 150, 200, 250)のように書いただけだとエラーになります。
図形作成時はどんな図形なのかも同時に指定する必要があり、具体的に言うと=がないとエラーになります。
' vba
' 1番目の種類の図形をx100y150の位置に幅200高さ250で作成
ActiveSheet.Shapes.AddShape(1, 100, 150, 200, 250).Fill.ForeColor.RGB = RGB(255, 0, 0)
たとえばFill.ForeColorで背景の色を赤に指定してやれば、
vba addshape2
こういった図形が作られます。
' vba
ActiveSheet.Shapes.AddShape(1, 100, 150, 200, 250).Name = "test1"
とりあえず何かプロパティを指定して=がついてればOKのようで、名前の変更とかでも動きます。

図形の種類

' vba
ActiveSheet.Shapes.AddShape(msoShapeRectangle, 100, 150, 200, 250).Name = "test1"
図形の種類は対応する数字またはMsoAutoShapeType列挙型定数で指定します。
数字の「1」にあたる長方形は、定数でmsoShapeRectangleと指定することもできます。
vba addshape3
同様に数字2は定数でいうとmsoShapeParallelogram
vba addshape4
数字3は定数でいうとmsoShapeTrapezoidとなります。
vba addshape5
この調子で137種類の図形が指定できます。

種類一覧の作成

図形と対応する番号は以下のコードで取得できます。

' vba
Option Explicit
Sub MsoAutoShapeType定数一覧()

Dim i As Integer
Dim n As Integer
Dim startCell As Integer: startCell = 1
Dim endCell As Integer: endCell = 25
Dim yPosition As Integer: yPosition = 0
Dim xPosition As Integer: xPosition = 0

For n = 1 To 6

For i = startCell To endCell
With ActiveSheet.Shapes.AddShape(i, Cells(1, 2 + xPosition).Left + 30, Cells(i - yPosition, 2 + xPosition).Top + 2, 10, 10)
.Line.Weight = 1
.Fill.ForeColor.RGB = RGB(255, 255, 255)
Cells(i - yPosition, 1 + xPosition).Value = i
End With
Next
startCell = startCell + 25
endCell = endCell + 25
yPosition = yPosition + 25
xPosition = xPosition + 2
If endCell = 150 Then
endCell = 137
End If
Next

End Sub
vba addshape6
ご参考まで。定数名一覧は割愛しますが、MsoAutoShapeType 定数などで検索すると書き出してくださってるサイトがいくつかヒットします。

位置とサイズの指定(ポイント単位について)

Typeの後のよっつの数字はそれぞれLeft,Top,Width,Height(左と上からの距離、幅と高さ)となり、単位はポイント(1/72インチ)で指定できます。
数値の目安として、初期状態の行の高さが13.5ポイントになります(列幅は文字数単位)。

width vba
ポイント単位の行の高さはRange("A1").Height、列幅はRange("A1").Widthなどでも求められます。
列幅は54ポイントらしいので、
' vba
ActiveSheet.Shapes.AddShape(6, 54, 13.5, 54, 13.5).Name = "test1"
こういうコードを実行してやれば、
vba addshape width1
初期設定の列幅・行の高さで、A2にぴったりはまる図形が作成されます。54と13.5の部分でそれぞれWidth、Heightを取得してもOKです。
' vba
ActiveSheet.Shapes.AddShape(6, Range("B2").Left, Range("B2").Top, 54, 13.5).Name = "test1"
セルのLeftTopを指定しても同じ意味になります。
vba addshape width2
AddShape(6, Range("B2").Left, Range("B2").Top, Range("B2").Left * 3, Range("B2").Top * 4)だとこうなります。
四則演算も使いこなせば、大体狙った通りの位置に狙ったサイズの図形を出すことができるはずです。
Excel(エクセル):図形
Excelでは、図形という機能を使うことで四角形や丸、矢印などのオブジェクトをシート状に配置することができます。セルの形状を無視して配置できるので、フローチャートや装飾、注釈などアイデア次第でさまざまな用途に利用できます。 図形作成・操作...
関数・演算子・メソッド・プロパティ名から探すExcel/VBA(マクロ)使い方・組み合わせ方まとめ
こちらはExcelやメソッドの諸機能を、機能の名称から探せるまとめ記事です。
やりたいことから方法を探すエクセル(Excel)操作・関数・VBA(マクロ)逆引きまとめ
逆引き(やりたいことから探す)Excel記事まとめ

コメント