Excelで図形を使ってボタンやUIを作るとき、次のようなことで困ったことはありませんか?
- 図形がセルと微妙にずれてしまう
- セルのサイズを変更すると図形の位置がずれる
- 図形を手作業で合わせるのが面倒
このような場合は、VBAで図形をセルの位置・サイズに合わせることができます。
この記事では、図形を指定セルにぴったり合わせるマクロを初心者向けに解説します。
この記事でできること
- 図形をセルの位置に合わせる
- 図形サイズをセルサイズに合わせる
- 複数の図形をセルに自動配置する
- ダッシュボードやボタンUI作成に活用する
完成コード(コピペOK)
まずは基本コードです。
このコードは、指定した図形をセルA1にぴったり合わせます。
Option Explicit
Sub FitShapeToCell()
Dim shp As Shape
Dim targetCell As Range
Set shp = ActiveSheet.Shapes("Rectangle 1")
Set targetCell = Range("A1")
shp.Left = targetCell.Left
shp.Top = targetCell.Top
shp.Width = targetCell.Width
shp.Height = targetCell.Height
End Sub
コードの意味を解説
Left
図形の左位置を指定します。
セルのLeftを指定することで、セルと同じ位置になります。
Top
図形の上位置です。
セルのTopを使うことでぴったり配置できます。
Width / Height
セルのサイズに合わせて図形サイズを変更します。
図形の名前について
VBAで図形を操作するときは、次のように図形名を使うことがあります。
Set shp = ActiveSheet.Shapes("Rectangle 1")
この "Rectangle 1" の部分が図形の名前です。
Excelでは、図形を作成すると自動的に名前が付きます。
ただしここで注意が必要です。
図形の種類によって、自動で付く名前が異なります。
そのため、別の種類の図形を作っているのに、毎回 "Rectangle 1" と書いてしまうと、
- 実行時エラー9
- 図形が見つかりませんエラー
の原因になります。
図形の名前を確認する方法
図形をクリックすると、画面左上の数式バーに選択した図形の名前(日本語表記)が表示されます。
ただし、ここに表示される名称では、VBAで使用する図形名を確認することはできません。
それでは、VBAで使用する図形名をどのように取得すればよいのか、以下でご説明いたします。

方法:VBAで図形名を確認する
シート上にどんな図形名があるか分からない場合は、次のマクロが便利です。
Sub ShowShapeNames()
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
Debug.Print shp.Name
Next shp
End Sub
このコードを実行すると、イミディエイトウィンドウに図形名が一覧表示されます。
イミディエイトウィンドウは、VBAエディタで Ctrl + G を押すと表示できます。

図形の種類ごとに付く名前の例
Excelでは、図形の種類によって次のような名前が自動で付きます。
環境やバージョンによって多少違うことがありますが、基本的にはこのような形です。
| 図形の種類 | 自動で付く名前の例 |
|---|---|
| 四角形 | Rectangle 1 |
| 角丸四角形 | Rounded Rectangle 1 |
| 円・楕円 | Oval 1 |
| 右矢印 | Right Arrow 1 |
| 左矢印 | Left Arrow 1 |
| 上矢印 | Up Arrow 1 |
| 下矢印 | Down Arrow 1 |
| 山形矢印(Chevron) | Chevron 1 |
| 吹き出し | Rectangular Callout 1 |
| 線 | Line 1 |
| コネクタ | Straight Connector 1 |
| テキストボックス | TextBox 1 |
例えば、右矢印を作ったのにVBAで
Set shp = ActiveSheet.Shapes("Rectangle 1")
としてしまうと、目的の図形が見つからずエラーになります。
名前で指定するのが不安な場合の対処法
図形名は環境や追加順で変わることがあるため、初心者のうちは次の方法がおすすめです。
① 選択中の図形を使う
Set shp = Selection.ShapeRange(1)
この方法なら、名前を知らなくても操作できます。
② 自分で名前を付け直す
図形作成後に、VBAで分かりやすい名前を付けることもできます。
shp.Name = "btnStart"
こうしておけば、後から
Set shp = ActiveSheet.Shapes("btnStart")
のように、分かりやすい名前で指定できます。
実行手順(初心者向け)
- Excelで図形を作成する
- 図形名を名前ボックスで確認する
- Alt + F11でVBAエディタを開く
- 挿入 → 標準モジュール
- コードを貼り付ける
- 必要に応じて図形名やセル位置を変更する
- マクロを実行する
応用①:選択中の図形をセルに合わせる
図形名を指定せず、選択中の図形を対象にする方法です。
Sub FitSelectedShape()
Dim shp As Shape
Dim targetCell As Range
Set shp = Selection.ShapeRange(1)
Set targetCell = Range("A1")
shp.Left = targetCell.Left
shp.Top = targetCell.Top
shp.Width = targetCell.Width
shp.Height = targetCell.Height
End Sub
応用②:複数の図形をセルに自動配置する
複数の図形をA列のセルに順番に配置する例です。
Sub FitShapesToCells()
Dim shp As Shape
Dim i As Long
Dim r As Range
i = 1
For Each shp In ActiveSheet.Shapes
Set r = Cells(i, 1)
shp.Left = r.Left
shp.Top = r.Top
shp.Width = r.Width
shp.Height = r.Height
i = i + 1
Next shp
End Sub
実務での活用例
- ダッシュボードのボタン配置
- チェックボックスUI
- セル型メニュー
- 進捗バー表示
図形をセルに合わせることで、Excelをアプリのように使うUIを作ることができます。
よくあるエラーと対処法
① 図形名が違う
図形の種類によって名前が違うので、必ず名前ボックスか一覧取得マクロで確認してください。
② 図形がセルに収まらない
セルサイズが小さい可能性があります。
セル幅や高さを調整してください。
③ 図形名を変更したのにコードが古いまま
図形名を手動変更した後は、VBA内の名前も同じにする必要があります。
まとめ
- Leftで横位置を合わせる
- Topで縦位置を合わせる
- Width / Heightでサイズを合わせる
- 図形名は種類によって異なるので注意する
- 不安なら選択中の図形を使う方法が安全
図形をセルに合わせるマクロを使うと、ダッシュボードやボタンUI作成が非常に簡単になります。
さらに図形名の仕組みを理解しておけば、エラーも大幅に減らせます。
ぜひ実務のExcelでも活用してみてください。


コメント