Shape

Worksheet

1. はじめに

Excelのシート上にはセルだけでなく、図形(Shapes)を配置できます。
Shapeオブジェクトは、そのような図形やオートシェイプ、テキストボックス、画像、ボタンなど、シート上の様々な描画オブジェクトを表します。

VBAでShapeを操作することで、図形の位置やサイズ、色、文字列などを自在に制御可能です。
このオブジェクトはグラフィカルな表現やユーザーインターフェース作成に欠かせません。


2. Shapeオブジェクトの概要

  • Shapeは1つの図形オブジェクトを表します。
  • Worksheet.Shapesコレクション内に複数のShapeが含まれています。
  • Excelで挿入できる様々なオブジェクト(矩形、円、テキストボックス、画像、グループ化オブジェクトなど)がShapeとして管理されます。
  • ShapeNameTypeで識別可能です。

3. Shapeオブジェクトの基本操作

3-1. 図形の取得

Sub Shape取得例()
Dim sh As Shape
Set sh = Worksheets("Sheet1").Shapes("Rectangle 1")

' 図形の左上のX座標を取得
MsgBox sh.Left
End Sub

3-2. 新しい図形の追加

Sub Shape追加例()
Dim sh As Shape
Set sh = Worksheets("Sheet1").Shapes.AddShape(msoShapeRectangle, 100, 100, 150, 80)

sh.Name = "MyRectangle"
sh.Fill.ForeColor.RGB = RGB(255, 0, 0) ' 赤色に塗りつぶし
sh.Line.Weight = 2 ' 線の太さ
End Sub

4. Shapeの種類(Type)

Shape.Typeプロパティで図形の種類が分かります。主な種類は以下。

定数意味
msoShapeRectangle1四角形(矩形)
msoShapeOval9楕円形(円)
msoShapeTextBox17テキストボックス
msoPicture13画像
msoLine4
msoGroup6グループ化された図形
msoAutoShape-2オートシェイプ(その他)

5. Shapeの位置とサイズの操作

プロパティ説明
Left左端の位置(ポイント)
Top上端の位置(ポイント)
Width幅(ポイント)
Height高さ(ポイント)
Sub 位置サイズ変更()
Dim sh As Shape
Set sh = Worksheets("Sheet1").Shapes("MyRectangle")

sh.Left = 200
sh.Top = 150
sh.Width = 300
sh.Height = 100
End Sub

6. 塗りつぶしと線の設定

6-1. 塗りつぶしの色変更

Sub 塗りつぶし変更()
Dim sh As Shape
Set sh = Worksheets("Sheet1").Shapes("MyRectangle")

sh.Fill.ForeColor.RGB = RGB(0, 255, 0) ' 緑色に変更
sh.Fill.Transparency = 0.3 ' 透過率30%
sh.Fill.Visible = msoTrue ' 塗りつぶし有効化
End Sub

6-2. 線の色と太さ

Sub 線設定()
Dim sh As Shape
Set sh = Worksheets("Sheet1").Shapes("MyRectangle")

sh.Line.ForeColor.RGB = RGB(0, 0, 255) ' 青色の線
sh.Line.Weight = 3 ' 線の太さ3ポイント
sh.Line.Visible = msoTrue ' 線を表示
End Sub

7. テキスト操作(テキストボックスや図形内の文字)

Shapeがテキストを持つ場合、TextFrameオブジェクト経由で操作します。

Sub テキスト操作()
Dim sh As Shape
Set sh = Worksheets("Sheet1").Shapes("MyRectangle")

If sh.HasTextFrame Then
If sh.TextFrame.HasText Then
sh.TextFrame.Characters.Text = "こんにちは、Excel VBA!"
sh.TextFrame.HorizontalAlignment = xlHAlignCenter
sh.TextFrame.VerticalAlignment = xlVAlignCenter
End If
End If
End Sub
  • TextFrame2を使うとさらに詳細な書式設定も可能(フォント、文字色など)。

8. 図形のコピーと移動

Sub コピーと移動()
Dim sh As Shape
Set sh = Worksheets("Sheet1").Shapes("MyRectangle")

' コピーして別名で作成
sh.Copy
Worksheets("Sheet1").Paste
Dim newSh As Shape
Set newSh = Worksheets("Sheet1").Shapes(Worksheets("Sheet1").Shapes.Count)
newSh.Name = "MyRectangleCopy"

' 新しい図形の位置をずらす
newSh.Left = newSh.Left + 50
newSh.Top = newSh.Top + 50
End Sub

9. 図形の削除と表示・非表示

Sub 削除表示制御()
Dim sh As Shape
Set sh = Worksheets("Sheet1").Shapes("MyRectangle")

' 非表示にする
sh.Visible = msoFalse

' 表示にする
sh.Visible = msoTrue

' 図形を削除
' sh.Delete
End Sub

10. グループ化とグループ解除

複数の図形を1つのグループにまとめたり、グループを解除したりできます。

Sub グループ化()
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")

Dim grp As ShapeRange
Set grp = ws.Shapes.Range(Array("MyRectangle", "MyRectangleCopy"))

Dim newGroup As Shape
Set newGroup = grp.Group
newGroup.Name = "MyGroup"
End Sub

Sub グループ解除()
Dim grp As Shape
Set grp = Worksheets("Sheet1").Shapes("MyGroup")

grp.Ungroup
End Sub

11. Shapeのその他の便利プロパティ・メソッド

プロパティ・メソッド説明
Name図形の名前
ZOrder図形の前後関係(前面・背面)調整
Rotation図形の回転角度
LockAspectRatio縦横比固定の有無
AlternativeText代替テキスト(アクセシビリティ用)
OnAction図形をクリックしたときに実行されるマクロ名

12. 実用的な例:クリックでマクロを実行する図形

Sub OnAction設定例()
Dim sh As Shape
Set sh = Worksheets("Sheet1").Shapes.AddShape(msoShapeRectangle, 100, 100, 120, 60)
sh.Name = "ButtonShape"
sh.Fill.ForeColor.RGB = RGB(100, 149, 237)
sh.TextFrame.Characters.Text = "クリックしてね"

' クリック時に実行するマクロを設定
sh.OnAction = "ButtonClicked"
End Sub

Sub ButtonClicked()
MsgBox "図形がクリックされました!"
End Sub

13. 注意点とTips

  • 図形の名前はExcel側が自動で付けることが多いですが、VBAで操作しやすいようにわかりやすい名前を付けることをおすすめします。
  • Shapesコレクション内の図形数はShapes.Countで取得可能。
  • 大量の図形操作は処理が遅くなることがあるため、必要に応じてApplication.ScreenUpdatingFalseにするのが効果的。
  • 図形の配置単位は「ポイント(1ポイント = 1/72インチ)」です。

14. まとめ

項目内容
Shapeワークシート上の1つの図形やオートシェイプ
代表的な図形矩形、円、線、テキストボックス、画像など
主なプロパティLeft, Top, Width, Height, Name, Fill, Lineなど
主な操作図形の追加、位置・サイズ変更、塗りつぶし設定、テキスト編集、コピー・削除、グループ化
テキスト操作TextFrameオブジェクト経由で行う
イベント関連OnActionで図形クリック時のマクロ実行可能
タイトルとURLをコピーしました