1. はじめに
Excelのシート上にはセルだけでなく、図形(Shapes)を配置できます。Shape
オブジェクトは、そのような図形やオートシェイプ、テキストボックス、画像、ボタンなど、シート上の様々な描画オブジェクトを表します。
VBAでShape
を操作することで、図形の位置やサイズ、色、文字列などを自在に制御可能です。
このオブジェクトはグラフィカルな表現やユーザーインターフェース作成に欠かせません。
2. Shapeオブジェクトの概要
Shape
は1つの図形オブジェクトを表します。Worksheet.Shapes
コレクション内に複数のShape
が含まれています。- Excelで挿入できる様々なオブジェクト(矩形、円、テキストボックス、画像、グループ化オブジェクトなど)が
Shape
として管理されます。 - 各
Shape
はName
やType
で識別可能です。
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
プロパティで図形の種類が分かります。主な種類は以下。
定数 | 値 | 意味 |
---|---|---|
msoShapeRectangle | 1 | 四角形(矩形) |
msoShapeOval | 9 | 楕円形(円) |
msoShapeTextBox | 17 | テキストボックス |
msoPicture | 13 | 画像 |
msoLine | 4 | 線 |
msoGroup | 6 | グループ化された図形 |
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.ScreenUpdating
をFalse
にするのが効果的。 - 図形の配置単位は「ポイント(1ポイント = 1/72インチ)」です。
14. まとめ
項目 | 内容 |
---|---|
Shape | ワークシート上の1つの図形やオートシェイプ |
代表的な図形 | 矩形、円、線、テキストボックス、画像など |
主なプロパティ | Left , Top , Width , Height , Name , Fill , Line など |
主な操作 | 図形の追加、位置・サイズ変更、塗りつぶし設定、テキスト編集、コピー・削除、グループ化 |
テキスト操作 | TextFrame オブジェクト経由で行う |
イベント関連 | OnAction で図形クリック時のマクロ実行可能 |