Excelで次のようなことをしたいと思ったことはありませんか?
- 図形をクリックしてマクロを実行したい
- 四角形やアイコンをボタン代わりに使いたい
- 見た目の良い操作画面を作りたい
実はExcelでは、図形にマクロを登録することで、クリックするだけでVBAを実行できます。
フォームボタンより見た目を自由に作れるため、ダッシュボードや操作画面を作るときによく使われる方法です。
この記事では、図形クリックでマクロを実行する基本から、VBAで自動登録する方法まで、初心者向けに分かりやすく解説します。
この記事でできること
- 図形をクリックしてマクロを実行できる
- 四角形や矢印をボタン代わりに使える
- 複数の図形に同じマクロを一括登録できる
- Excelを操作画面のように見せられる
一番簡単な方法:手動で図形にマクロを登録する
まずは一番簡単な方法です。
Excel上の操作だけで、図形クリックでマクロを実行できます。
1.Excelで図形を挿入する
2.図形を右クリックして、「マクロの登録」をクリック

3.マクロの登録画面で「新規作成」をクリック

4.コード入力画面が表示されます

これだけで、その図形がボタンのように使えるようになります。
まずは動かしてみる:クリックでメッセージを出すマクロ
図形のマクロに次のコードを入れてください。
MsgBox "図形がクリックされました。", vbInformation
このマクロを図形に登録すると、図形をクリックしたときにメッセージが表示されます。
VBAで図形にマクロを登録する方法(OnAction)
手動登録だけでなく、VBAから図形にマクロを割り当てることもできます。
使うのは OnAction というプロパティです。
Dim shp As Shape
Set shp = ActiveSheet.Shapes("Rectangle 1")
shp.OnAction = "正方形長方形1_Click"
このコードを実行すると、Rectangle 1 という図形をクリックしたときに 「方形長方形1_Click」 マクロが実行されるようになります。
OnActionとは?
OnAction は、その図形をクリックしたときに実行するマクロ名を指定する仕組みです。
shp.OnAction = "正方形長方形1_Click"
この1行で、
- 図形をクリック
- 指定したマクロを実行
という動作ができるようになります。
図形を自動作成して、そのままマクロを登録する
図形を作成した直後にマクロも登録すると、ボタン作成が自動化できます。
Option Explicit
Sub CreateButtonShape()
Dim shp As Shape
Set shp = ActiveSheet.Shapes.AddShape( _
Type:=msoShapeRoundedRectangle, _
Left:=100, _
Top:=100, _
Width:=150, _
Height:=50)
shp.TextFrame2.TextRange.Text = "実行"
shp.Fill.ForeColor.RGB = RGB(0, 112, 192)
shp.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(255, 255, 255)
' クリック時に実行するマクロを登録
shp.OnAction = "正方形長方形1_Click"
End Sub
このコードを実行すると、
- 角丸四角形が作成される
- 「実行」という文字が入る
- クリックすると 正方形長方形1_Click が動く
というボタンが完成します。
複数の図形に同じマクロを一括登録する
シート上の複数図形にまとめて同じマクロを割り当てたい場合は、
For Each で一括処理できます。
Option Explicit
Sub SetMacroToAllShapes()
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
shp.OnAction = "正方形長方形1_Click"
Next shp
MsgBox "すべての図形にマクロを登録しました。", vbInformation
End Sub
これで、シート上の図形すべてがクリック可能になります。
図形ごとに違うマクロを登録したい場合
図形名ごとに分岐させると、複数の機能を持つ操作画面を作れます。
Option Explicit
Sub SetMacroByShapeName()
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
Select Case shp.Name
Case "btnStart"
shp.OnAction = "MacroStart"
Case "btnStop"
shp.OnAction = "MacroStop"
Case "btnClear"
shp.OnAction = "MacroClear"
End Select
Next shp
End Sub
このようにすれば、図形ごとに別の動きをさせることができます。
クリックされた図形名を取得する方法
同じマクロを複数図形に登録し、どの図形が押されたかで処理を変えたいこともあります。
その場合は Application.Caller を使います。
Option Explicit
Sub ShapeClickHandler()
Dim shpName As String
shpName = Application.Caller
MsgBox "クリックされた図形は " & shpName & " です。", vbInformation
End Sub
この方法はかなり便利で、1つのマクロで複数ボタンを管理できます。
実務での活用例
- 入力フォームの「実行」「クリア」「保存」ボタン
- ダッシュボードのメニュー画面
- 月別・部署別の切り替えボタン
- チェック処理や集計処理の起動ボタン
フォームコントロールのボタンより見た目を自由に調整できるため、
Excelを業務アプリのように見せたいときに特に有効です。
よくあるエラーと対処法
① 図形名が違っている
次のコードで、シート上の図形名を確認できます。
Sub ShowShapeNames()
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
Debug.Print shp.Name
Next shp
End Sub
図形名は、Excel左上の名前ボックスでも確認できます。
② マクロ名のスペルが違う
OnAction = "正方形長方形1_Click" の文字列は、実際のマクロ名と完全一致している必要があります。
③ マクロが無効化されている
マクロ有効ブック(.xlsm)で保存し、Excelのマクロ設定を確認してください。
まとめ
- 図形は右クリックから手動でマクロ登録できる
- VBAでは
OnActionを使って登録できる - 図形作成と同時にボタン化も可能
Application.Callerを使うと応用範囲が広がる
図形クリックでマクロを実行できるようになると、
Excelを操作しやすい業務画面として作れるようになります。
ぜひ、ダッシュボードやメニュー画面づくりに活用してみてください。

コメント