Excel VBA 図形(オートシェイプ)一覧と作成、追加する方法

図形作成/操作

VBAで図形(オートシェイプ)を作成/追加する方法をご説明します。

図形(オートシェイプ)をVBAで作成~操作するには、単純に作成、追加するだけの基本的な部分は簡単です。

ですが、図形の種類の多さや細かい操作等をする場合には奥が深く、すべてを把握するのはとても大変です。

本記事では基本的な作成、追加についてご説明します。

VBAで操作する図形の種類と定数の関係を一覧にした図を作成しましたので、種類に迷ったらそちらを参照してください。

その他の図形の操作については次の記事をご覧ください。

1. 図形(オートシェイプ )のオブジェクト

図形を操作するうえで、Shapeオブジェクトに関連するオブジェクトをある程度理解する必要があります。

簡単にオブジェクトの説明をしますので、ご覧ください。

オブジェクト説明
ShapesShapeオブジェクトのコレクションでワークシート上のすべての図形です。
Shapeワークシート上にある単体の図形です。
オートシェイプ、フリーフォーム、OLE オブジェクト、ピクチャ等があります。
ShapeRangeワークシート上のすべての図形、または図形の範囲を表します。
GroupShapesグループ化した図形です。
FillFormat図形の塗りつぶしの書式設定に使用します。
LineFormat線と矢印の両端の書式設定に使用します。
TextFrameレイアウト枠の設定に使用します。
TextFrame22007から追加されたTextFrameの後継オブジェクト。

2.図形(オートシェイプ)の作成

図形(オートシェイプ)を作成するには「Shapeオブジェクト」を操作します。

AddShapeメソッドで新しく図形を作成できます。

次のように記述します。

Shapesオブジェクト.AddShape(Type, Left, Top, Width, Height)

VBAで図形を操作するには番号か名前で指定して操作します。

名前を任意に指定しない場合は、図形の種類と番号が自動的に付与されます。

ですが、VBAで操作するのに自動で生成された名前では扱いづらいため、面倒かもしれないですが自分で意味を持たせた名前を付ける事をおすすめします。

名前は次のように記述します。

Shapesオブジェクト.AddShape(Type, Left, Top, Width, Height).name="図形の名前"
AddShapeの引数一覧
引数名省略データ型説明
Type必須MsoAutoShapeTypeオートシェイプの種類を指定します。
Left必須Singleオートシェイプの左端位置を指定します。
Top必須Singleオートシェイプの上端位置を指定します。
Width必須Singleオートシェイプの幅を指定します。
Height必須Singleオートシェイプの高さを指定します。

3.図形(オートシェイプ)の種類

図形(オートシェイプ)は普段何気なく選んで、追加していると思いますが、操作するとなると非常に種類が多いです。

図形(オートシェイプ)の種類と値の関係図

正直タイプの種類が多すぎるのと、説明してもどれがどの図形かわかりにくいので、図形の種類と定数の値をセットにした対応表を作成しました。

次の対応表と定数一覧を参照して、図形の種類を選択してみてください。

全ての図形を一覧する方法もサンプルコードに記載しています。(値は出力しません)

図形(オートシェイプ)のタイプ一覧

定数種類
-2msoShapeMixed値のみを返します。
その他の状態の組み合わせを示します
1msoShapeRectangle四角形
2msoShapeParallelogram平行四辺形
3msoShapeTrapezoid台形
4msoShapeDiamondひし形
5msoShapeRoundedRectangle角丸四角形
6msoShapeOctagon八角形
7msoShapeIsoscelesTriangle二等辺三角形
8msoShapeRightTriangle直角三角形
9msoShapeOval楕円
10msoShapeHexagon六角形
11msoShapeCross十字形
12msoShapeRegularPentagonホームベース
13msoShapeCan円柱
14msoShapeCube直方体
15msoShapeBevel斜角
16msoShapeFoldedCornerメモ
17msoShapeSmileyFaceスマイル
18msoShapeDonutドーナツ
19msoShapeNoSymbol禁止
20msoShapeBlockArcアーチ
21msoShapeHeartハート
22msoShapeLightningBolt稲妻
23msoShapeSun太陽
24msoShapeMoon
25msoShapeArc円弧
26msoShapeDoubleBracket大かっこ
27msoShapeDoubleBrace中かっこ
28msoShapePlaqueブローチ
29msoShapeLeftBracket左大かっこ
30msoShapeRightBracket右大かっこ
31msoShapeLeftBrace左中かっこ
32msoShapeRightBrace右中かっこ
33msoShapeRightArrow右向きブロック矢印
34msoShapeLeftArrow左向きブロック矢印
35msoShapeUpArrow上向きブロック矢印
36msoShapeDownArrow下向きブロック矢印
37msoShapeLeftRightArrow左右ブロック矢印
38msoShapeUpDownArrow上下2方向ブロック矢印
39msoShapeQuadArrow4方向ブロック矢印
40msoShapeLeftRightUpArrow左、右、および上の3方向ブロック矢印
41msoShapeBentArrow90°の曲線に続くブロック矢印
42msoShapeUTurnArrowU字型のブロック矢印
43msoShapeLeftUpArrow左および上矢印の2方向ブロック矢印
44msoShapeBentUpArrow90°の鋭角線に続くブロック矢印
45msoShapeCurvedRightArrow右カーブブロック矢印
46msoShapeCurvedLeftArrow左カーブブロック矢印
47msoShapeCurvedUpArrow上カーブブロック矢印
48msoShapeCurvedDownArrow下カーブブロック矢印
49msoShapeStripedRightArrow先にストライプの付いた右向きのブロック矢印
50msoShapeNotchedRightArrow右向きのV字型矢印
51msoShapePentagonホームベース
52msoShapeChevron山形
53msoShapeRightArrowCallout右矢印の付いた吹き出し
54msoShapeLeftArrowCallout左矢印の付いた吹き出し
55msoShapeUpArrowCallout上矢印の付いた吹き出し
56msoShapeDownArrowCallout下矢印の付いた吹き出し
57msoShapeLeftRightArrowCallout左右矢印の付いた吹き出し
58msoShapeUpDownArrowCallout上下のブロック矢印の付いた吹き出し
59msoShapeQuadArrowCallout4方向矢印の付いた吹き出し
60msoShapeCircularArrow180°の曲線に続くブロック矢印
61msoShapeFlowchart処理フローチャート記号
62msoShape代替処理フローチャート記号
63msoShapeFlowchart判断フローチャート記号
64msoShapeデータフローチャート記号
65msoShapeFlowchart定義済み処理フローチャート記号
66msoShape内部記憶フローチャート記号
67msoShapeFlowchart書類フローチャート記号
68msoShape複数書類フローチャート記号
69msoShapeFlowchart端子フローチャート記号
70msoShape準備フローチャート記号
71msoShapeFlowchart手操作入力フローチャート記号
72msoShape手作業フローチャート記号
73msoShapeFlowchart結合子フローチャート記号
74msoShape他ページ結合子フローチャート記号
75msoShapeFlowchartカードフローチャート記号
76msoShapeせん孔テープフローチャート記号
77msoShapeFlowchart和接合フローチャート記号
78msoShape論理和フローチャート記号
79msoShapeFlowchart照合フローチャート記号
80msoShape分類フローチャート記号
81msoShapeFlowchart抜き出しフローチャート記号
82msoShape組み合わせフローチャート記号
83msoShapeFlowchart記憶データフローチャート記号
84msoShape論理積ゲートフローチャート記号
85msoShapeFlowchart順次アクセス記憶フローチャート記号
86msoShape磁気ディスクフローチャート記号
87msoShapeFlowchart直接アクセス記憶フローチャート記号
88msoShape表示フローチャート記号
89msoShapeExplosion1爆発
90msoShapeExplosion2爆発
91msoShape4pointStar星4
92msoShape5pointStar星5
93msoShape8pointStar星8
94msoShape16pointStar星16
95msoShape24pointStar星24
96msoShape32pointStar星32
97msoShapeUpRibbonリボンの端よりも上に中央面があるリボン
98msoShapeDownRibbonリボンの端よりも下に中央面があるリボン
99msoShapeCurvedUpRibbon上カーブリボン
100msoShapeCurvedDownRibbon下カーブリボン
101msoShapeVerticalScroll縦巻き
102msoShapeHorizontalScroll横巻き
103msoShapeWave大波
104msoShapeDoubleWave小波
105msoShapeRectangularCallout四角形吹き出し
106msoShapeRoundedRectangularCallout角丸四角形吹き出し
107msoShapeOvalCallout円形吹き出し
108msoShapeCloudCallout雲形吹き出し
109msoShapeLineCallout1枠付きで、水平の吹き出し線の付いた吹き出し
110msoShapeLineCallout2斜めの直線の付いた吹き出し
111msoShapeLineCallout3折れ線の付いた吹き出し
112msoShapeLineCallout4U字型の吹き出し線分の付いた吹き出し
113msoShapeLineCallout1水平の強調線の付いた吹き出し
114msoShape斜めの吹き出し線と強調線の付いた吹き出し
115msoShapeLineCallout3折れた吹き出し線と強調線の付いた吹き出し
116msoShape強調線およびU字型の吹き出し線分の付いた吹き出し
117msoShapeLineCallout1水平線の付いた吹き出し
118msoShape枠および斜めの吹き出し線のない吹き出し
119msoShapeLineCallout3枠および折れた吹き出し線のない吹き出し
120msoShape枠線およびU字型の吹き出し線分のない呼び出し
121msoShapeLineCallout1枠付きで、水平の強調線の付いた吹き出し
122msoShape枠、斜めの直線、および強調線の付いた吹き出し
123msoShapeLineCallout3枠、折れた吹き出し線、強調線の付いた吹き出し
124msoShape枠線、強調線、およびU字型の吹き出し線分の付いた吹き出し
125msoShapeActionButtonCustom既定の画像またはテキストのないボタン
126msoShapeActionButtonHome[ホーム]ボタン
127msoShapeActionButtonHelp[ヘルプ]ボタン
128msoShapeActionButtonInformation[情報]ボタン
129msoShapeActionButtonBackorPrevious[戻る]または[前へ]ボタン
130msoShapeActionButtonForwardorNext[進む]または[次へ]ボタン
131msoShapeActionButtonBeginning[上旬]ボタン
132msoShapeActionButtonEnd[終了]ボタン
133msoShapeActionButtonReturn[戻る]ボタン
134msoShapeActionButtonDocument[文書]ボタン
135msoShapeActionButtonSound[サウンド]ボタン
136msoShapeActionButtonMovie[ビデオ]ボタン
137msoShapeBalloon吹き出し

4.サンプルコード

図形の作成方法に対し、一覧から作成したい図形(オートシェイプ)を選択します。

あとはサイズと位置を指定する事で、図形は作成できます。

基本的な作成サンプル

Sub Sample1()

'Type,Left,Top,Width,Heightを指定
With ActiveSheet.Shapes.AddShape(msoShapeRectangle, 50, 50, 50, 50)

    '名前を指定
    .Name = "図形1"

    '図形の塗りつぶし色を指定
    .Fill.ForeColor.RGB = RGB(100, 200, 255)
    
End With

End Sub

図形にテキストを組み込むサンプル

Sub Sample2()

'Type,Left,Top,Width,Heightを指定
With ActiveSheet.Shapes.AddShape(msoShapeRectangle, 50, 50, 50, 50)
    
  '名前を指定
    .Name = "図形1"

    '図形の塗りつぶし色を指定
    .Fill.ForeColor.RGB = RGB(100, 200, 255)
    
    With .TextFrame.Characters 'テキスト
        .Text = "四角形" '文字列
        .Font.Size = 10 '文字のサイズ
        .Font.Bold = True
    End With
    
End With

End Sub

図形(オートシェイプ)の種類と値の関係図サンプルコード

こちらは単純に全ての図形を位置を移動しながら、ループで図形を指定して作成しただけになります。

ポイントは10個作成したら縦位置を移動させている部分です。

Sub Sample3()

Dim i       As Long
Dim S_Left  As Long
Dim S_Top   As Long

S_Left = 40
S_Top = 40

With ActiveSheet

    For i = 1 To 137
    
        With .Shapes.AddShape(i, S_Left , S_Top , 20, 20)
        
            .Fill.ForeColor.RGB = RGB(100, 200, 255)
            
        End With
            
        S_Left = S_Left + 40
        
        If i Mod 10 = 0 Then
            S_Left = 40
            S_Top = S_Top + 40
        End If
        
    Next i

End With

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