Excelで図形を使ってボタンやフローチャートを作っていると、 次のようなことで困ったことはありませんか?
- 図形が微妙にずれて見た目が悪い
- 複数の図形を均等に並べたい
- 手作業で位置調整するのが面倒
このような場合は、VBAで図形を一括整列するのが便利です。
この記事では、図形を縦・横にきれいに並べる基本マクロを初心者向けに解説します。
この記事でできること
- 複数の図形を縦方向に並べる
- 複数の図形を横方向に並べる
- 図形の間隔をそろえる
- 見た目の整ったダッシュボードやボタンUIを作る
完成コード①:図形を縦に一括整列する
まずは、選択している図形を上から下へ一定間隔で整列するコードです。
Option Explicit
Sub AlignShapesVertical()
Dim shp As Shape
Dim startTop As Double
Dim fixedLeft As Double
Dim gapY As Double
Dim i As Long
' ===== 設定 =====
startTop = 50 ' 開始位置(上)
fixedLeft = 50 ' 左位置をそろえる
gapY = 20 ' 図形どうしの間隔
' =================
If Selection.ShapeRange.Count = 0 Then
MsgBox "図形を選択してください。", vbExclamation
Exit Sub
End If
i = 0
For Each shp In Selection.ShapeRange
shp.Left = fixedLeft
shp.Top = startTop + i * (shp.Height + gapY)
i = i + 1
Next shp
MsgBox "図形を縦に整列しました。", vbInformation
End Sub
完成コード②:図形を横に一括整列する
次は、選択している図形を左から右へ一定間隔で整列するコードです。
Option Explicit
Sub AlignShapesHorizontal()
Dim shp As Shape
Dim startLeft As Double
Dim fixedTop As Double
Dim gapX As Double
Dim i As Long
' ===== 設定 =====
startLeft = 50 ' 開始位置(左)
fixedTop = 50 ' 上位置をそろえる
gapX = 20 ' 図形どうしの間隔
' =================
If Selection.ShapeRange.Count = 0 Then
MsgBox "図形を選択してください。", vbExclamation
Exit Sub
End If
i = 0
For Each shp In Selection.ShapeRange
shp.Left = startLeft + i * (shp.Width + gapX)
shp.Top = fixedTop
i = i + 1
Next shp
MsgBox "図形を横に整列しました。", vbInformation
End Sub
コードの意味をわかりやすく解説
Selection.ShapeRangeとは?
現在選択している図形の集まりを表します。
複数の図形をまとめて処理したいときによく使います。
Left / Topとは?
図形の位置を指定するプロパティです。
- Left:左からの位置
- Top:上からの位置
gapX / gapYとは?
図形どうしの間隔です。
この数値を変えることで、図形の並び間隔を自由に調整できます。
実行手順(初心者向け)
- Excelで複数の図形を作成する
- 整列したい図形をすべて選択する
- Alt + F11でVBAエディタを開く
- 挿入 → 標準モジュール
- コードを貼り付ける
- マクロを実行する
応用①:同じサイズにそろえてから整列する
図形の大きさがバラバラだと、整列しても見た目がそろいにくいです。
その場合は、先に同じサイズにそろえるときれいになります。
Sub ResizeAndAlignShapes()
Dim shp As Shape
Dim i As Long
If Selection.ShapeRange.Count = 0 Then Exit Sub
i = 0
For Each shp In Selection.ShapeRange
shp.Width = 120
shp.Height = 50
shp.Left = 50
shp.Top = 50 + i * 70
i = i + 1
Next shp
End Sub
応用②:シート上のすべての図形を整列する
選択した図形だけでなく、シート内の図形全部を対象にすることもできます。
Sub AlignAllShapesVertical()
Dim shp As Shape
Dim i As Long
i = 0
For Each shp In ActiveSheet.Shapes
shp.Left = 50
shp.Top = 50 + i * (shp.Height + 20)
i = i + 1
Next shp
End Sub
ただし、不要な図形まで動かしてしまうことがあるため、
通常は選択した図形だけを対象にする方法がおすすめです。
実務での活用例
- ダッシュボードのボタン整列
- 操作メニューの見た目調整
- フローチャートの工程ブロック整列
- 報告資料の図形レイアウト整理
特に、図形を使って「操作画面」や「説明図」を作る場合は、
整列マクロがあると見た目が一気に整います。
よくあるエラーと対処法
① 図形が選択されていない
Selection.ShapeRange を使うため、図形が未選択だとエラーになります。
実行前に必ず図形を選択してください。
② 図形以外も選択している
セルや画像などが混ざるとエラーになることがあります。
図形だけを選択してください。
③ 図形の順番が思った通りでない
For Each は、選択順ではなく図形コレクションの順番で処理されることがあります。
並び順まで厳密に制御したい場合は、図形名でソートする方法もあります。
まとめ
- 図形はVBAで一括整列できる
- Left / Top を使えば位置をそろえられる
- gapX / gapY で間隔を調整できる
- ボタンUIやフローチャート作成で特に便利
図形を手作業で並べるのは意外と時間がかかりますが、 VBAで整列できるようになると、見た目のきれいなExcel画面をすぐ作れるようになります。
ぜひ、ダッシュボードや操作画面づくりに活用してみてください。

コメント