VBAで図形(オートシェイプ)を作成/追加する方法をご説明します。
図形(オートシェイプ)をVBAで作成~操作するには、単純に作成、追加するだけの基本的な部分は簡単です。
ですが、図形の種類の多さや細かい操作等をする場合には奥が深く、すべてを把握するのはとても大変です。
本記事では基本的な作成、追加についてご説明します。
VBAで操作する図形の種類と定数の関係を一覧にした図を作成しましたので、種類に迷ったらそちらを参照してください。
その他の図形の操作については次の記事をご覧ください。
- 図形(オートシェイプ)の位置やサイズを変更する
- 図形(オートシェイプ)を取得する方法
- 図形(オートシェイプ)を反転、回転させる方法
- 図形(オートシェイプ)の塗りつぶしを変更する方法
- 図形(オートシェイプ)の枠線の色や種類と太さを変更する方法
- 図形(オートシェイプ)にテキスト・文字列の入力方法
- 図形(オートシェイプ)にマクロを登録する方法
1. 図形(オートシェイプ )のオブジェクト
図形を操作するうえで、Shapeオブジェクトに関連するオブジェクトをある程度理解する必要があります。
簡単にオブジェクトの説明をしますので、ご覧ください。
オブジェクト | 説明 |
Shapes | Shapeオブジェクトのコレクションでワークシート上のすべての図形です。 |
Shape | ワークシート上にある単体の図形です。 オートシェイプ、フリーフォーム、OLE オブジェクト、ピクチャ等があります。 |
ShapeRange | ワークシート上のすべての図形、または図形の範囲を表します。 |
GroupShapes | グループ化した図形です。 |
FillFormat | 図形の塗りつぶしの書式設定に使用します。 |
LineFormat | 線と矢印の両端の書式設定に使用します。 |
TextFrame | レイアウト枠の設定に使用します。 |
TextFrame2 | 2007から追加された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.図形(オートシェイプ)の種類
図形(オートシェイプ)は普段何気なく選んで、追加していると思いますが、操作するとなると非常に種類が多いです。
図形(オートシェイプ)の種類と値の関係図
正直タイプの種類が多すぎるのと、説明してもどれがどの図形かわかりにくいので、図形の種類と定数の値をセットにした対応表を作成しました。
次の対応表と定数一覧を参照して、図形の種類を選択してみてください。
全ての図形を一覧する方法もサンプルコードに記載しています。(値は出力しません)
図形(オートシェイプ)のタイプ一覧
値 | 定数 | 種類 |
-2 | msoShapeMixed | 値のみを返します。 その他の状態の組み合わせを示します |
1 | msoShapeRectangle | 四角形 |
2 | msoShapeParallelogram | 平行四辺形 |
3 | msoShapeTrapezoid | 台形 |
4 | msoShapeDiamond | ひし形 |
5 | msoShapeRoundedRectangle | 角丸四角形 |
6 | msoShapeOctagon | 八角形 |
7 | msoShapeIsoscelesTriangle | 二等辺三角形 |
8 | msoShapeRightTriangle | 直角三角形 |
9 | msoShapeOval | 楕円 |
10 | msoShapeHexagon | 六角形 |
11 | msoShapeCross | 十字形 |
12 | msoShapeRegularPentagon | ホームベース |
13 | msoShapeCan | 円柱 |
14 | msoShapeCube | 直方体 |
15 | msoShapeBevel | 斜角 |
16 | msoShapeFoldedCorner | メモ |
17 | msoShapeSmileyFace | スマイル |
18 | msoShapeDonut | ドーナツ |
19 | msoShapeNoSymbol | 禁止 |
20 | msoShapeBlockArc | アーチ |
21 | msoShapeHeart | ハート |
22 | msoShapeLightningBolt | 稲妻 |
23 | msoShapeSun | 太陽 |
24 | msoShapeMoon | 月 |
25 | msoShapeArc | 円弧 |
26 | msoShapeDoubleBracket | 大かっこ |
27 | msoShapeDoubleBrace | 中かっこ |
28 | msoShapePlaque | ブローチ |
29 | msoShapeLeftBracket | 左大かっこ |
30 | msoShapeRightBracket | 右大かっこ |
31 | msoShapeLeftBrace | 左中かっこ |
32 | msoShapeRightBrace | 右中かっこ |
33 | msoShapeRightArrow | 右向きブロック矢印 |
34 | msoShapeLeftArrow | 左向きブロック矢印 |
35 | msoShapeUpArrow | 上向きブロック矢印 |
36 | msoShapeDownArrow | 下向きブロック矢印 |
37 | msoShapeLeftRightArrow | 左右ブロック矢印 |
38 | msoShapeUpDownArrow | 上下2方向ブロック矢印 |
39 | msoShapeQuadArrow | 4方向ブロック矢印 |
40 | msoShapeLeftRightUpArrow | 左、右、および上の3方向ブロック矢印 |
41 | msoShapeBentArrow | 90°の曲線に続くブロック矢印 |
42 | msoShapeUTurnArrow | U字型のブロック矢印 |
43 | msoShapeLeftUpArrow | 左および上矢印の2方向ブロック矢印 |
44 | msoShapeBentUpArrow | 90°の鋭角線に続くブロック矢印 |
45 | msoShapeCurvedRightArrow | 右カーブブロック矢印 |
46 | msoShapeCurvedLeftArrow | 左カーブブロック矢印 |
47 | msoShapeCurvedUpArrow | 上カーブブロック矢印 |
48 | msoShapeCurvedDownArrow | 下カーブブロック矢印 |
49 | msoShapeStripedRightArrow | 先にストライプの付いた右向きのブロック矢印 |
50 | msoShapeNotchedRightArrow | 右向きのV字型矢印 |
51 | msoShapePentagon | ホームベース |
52 | msoShapeChevron | 山形 |
53 | msoShapeRightArrowCallout | 右矢印の付いた吹き出し |
54 | msoShapeLeftArrowCallout | 左矢印の付いた吹き出し |
55 | msoShapeUpArrowCallout | 上矢印の付いた吹き出し |
56 | msoShapeDownArrowCallout | 下矢印の付いた吹き出し |
57 | msoShapeLeftRightArrowCallout | 左右矢印の付いた吹き出し |
58 | msoShapeUpDownArrowCallout | 上下のブロック矢印の付いた吹き出し |
59 | msoShapeQuadArrowCallout | 4方向矢印の付いた吹き出し |
60 | msoShapeCircularArrow | 180°の曲線に続くブロック矢印 |
61 | msoShapeFlowchart | 処理フローチャート記号 |
62 | msoShape | 代替処理フローチャート記号 |
63 | msoShapeFlowchart | 判断フローチャート記号 |
64 | msoShape | データフローチャート記号 |
65 | msoShapeFlowchart | 定義済み処理フローチャート記号 |
66 | msoShape | 内部記憶フローチャート記号 |
67 | msoShapeFlowchart | 書類フローチャート記号 |
68 | msoShape | 複数書類フローチャート記号 |
69 | msoShapeFlowchart | 端子フローチャート記号 |
70 | msoShape | 準備フローチャート記号 |
71 | msoShapeFlowchart | 手操作入力フローチャート記号 |
72 | msoShape | 手作業フローチャート記号 |
73 | msoShapeFlowchart | 結合子フローチャート記号 |
74 | msoShape | 他ページ結合子フローチャート記号 |
75 | msoShapeFlowchart | カードフローチャート記号 |
76 | msoShape | せん孔テープフローチャート記号 |
77 | msoShapeFlowchart | 和接合フローチャート記号 |
78 | msoShape | 論理和フローチャート記号 |
79 | msoShapeFlowchart | 照合フローチャート記号 |
80 | msoShape | 分類フローチャート記号 |
81 | msoShapeFlowchart | 抜き出しフローチャート記号 |
82 | msoShape | 組み合わせフローチャート記号 |
83 | msoShapeFlowchart | 記憶データフローチャート記号 |
84 | msoShape | 論理積ゲートフローチャート記号 |
85 | msoShapeFlowchart | 順次アクセス記憶フローチャート記号 |
86 | msoShape | 磁気ディスクフローチャート記号 |
87 | msoShapeFlowchart | 直接アクセス記憶フローチャート記号 |
88 | msoShape | 表示フローチャート記号 |
89 | msoShapeExplosion1 | 爆発 |
90 | msoShapeExplosion2 | 爆発 |
91 | msoShape4pointStar | 星4 |
92 | msoShape5pointStar | 星5 |
93 | msoShape8pointStar | 星8 |
94 | msoShape16pointStar | 星16 |
95 | msoShape24pointStar | 星24 |
96 | msoShape32pointStar | 星32 |
97 | msoShapeUpRibbon | リボンの端よりも上に中央面があるリボン |
98 | msoShapeDownRibbon | リボンの端よりも下に中央面があるリボン |
99 | msoShapeCurvedUpRibbon | 上カーブリボン |
100 | msoShapeCurvedDownRibbon | 下カーブリボン |
101 | msoShapeVerticalScroll | 縦巻き |
102 | msoShapeHorizontalScroll | 横巻き |
103 | msoShapeWave | 大波 |
104 | msoShapeDoubleWave | 小波 |
105 | msoShapeRectangularCallout | 四角形吹き出し |
106 | msoShapeRoundedRectangularCallout | 角丸四角形吹き出し |
107 | msoShapeOvalCallout | 円形吹き出し |
108 | msoShapeCloudCallout | 雲形吹き出し |
109 | msoShapeLineCallout1 | 枠付きで、水平の吹き出し線の付いた吹き出し |
110 | msoShapeLineCallout2 | 斜めの直線の付いた吹き出し |
111 | msoShapeLineCallout3 | 折れ線の付いた吹き出し |
112 | msoShapeLineCallout4 | U字型の吹き出し線分の付いた吹き出し |
113 | msoShapeLineCallout1 | 水平の強調線の付いた吹き出し |
114 | msoShape | 斜めの吹き出し線と強調線の付いた吹き出し |
115 | msoShapeLineCallout3 | 折れた吹き出し線と強調線の付いた吹き出し |
116 | msoShape | 強調線およびU字型の吹き出し線分の付いた吹き出し |
117 | msoShapeLineCallout1 | 水平線の付いた吹き出し |
118 | msoShape | 枠および斜めの吹き出し線のない吹き出し |
119 | msoShapeLineCallout3 | 枠および折れた吹き出し線のない吹き出し |
120 | msoShape | 枠線およびU字型の吹き出し線分のない呼び出し |
121 | msoShapeLineCallout1 | 枠付きで、水平の強調線の付いた吹き出し |
122 | msoShape | 枠、斜めの直線、および強調線の付いた吹き出し |
123 | msoShapeLineCallout3 | 枠、折れた吹き出し線、強調線の付いた吹き出し |
124 | msoShape | 枠線、強調線、およびU字型の吹き出し線分の付いた吹き出し |
125 | msoShapeActionButtonCustom | 既定の画像またはテキストのないボタン |
126 | msoShapeActionButtonHome | [ホーム]ボタン |
127 | msoShapeActionButtonHelp | [ヘルプ]ボタン |
128 | msoShapeActionButtonInformation | [情報]ボタン |
129 | msoShapeActionButtonBackorPrevious | [戻る]または[前へ]ボタン |
130 | msoShapeActionButtonForwardorNext | [進む]または[次へ]ボタン |
131 | msoShapeActionButtonBeginning | [上旬]ボタン |
132 | msoShapeActionButtonEnd | [終了]ボタン |
133 | msoShapeActionButtonReturn | [戻る]ボタン |
134 | msoShapeActionButtonDocument | [文書]ボタン |
135 | msoShapeActionButtonSound | [サウンド]ボタン |
136 | msoShapeActionButtonMovie | [ビデオ]ボタン |
137 | msoShapeBalloon | 吹き出し |
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