【ExcelVBA・マクロ】図形をセルの位置にぴったり合わせるマクロ|セルサイズに自動フィットする方法

図形をセルの位置にぴったり合わせる ExcelVBA

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")

のように、分かりやすい名前で指定できます。


実行手順(初心者向け)

  1. Excelで図形を作成する
  2. 図形名を名前ボックスで確認する
  3. Alt + F11でVBAエディタを開く
  4. 挿入 → 標準モジュール
  5. コードを貼り付ける
  6. 必要に応じて図形名やセル位置を変更する
  7. マクロを実行する

応用①:選択中の図形をセルに合わせる

図形名を指定せず、選択中の図形を対象にする方法です。

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でも活用してみてください。

スポンサーリンク
スポンサーリンク
ExcelVBA
いがぴをフォローする

コメント

タイトルとURLをコピーしました