Excel VBA:ボタンのプロパティを確認するコード集
はじめに
Excel VBAで既存のマクロを解析する際、シート上のボタンにどのマクロが割り当てられているか確認したいことがあります。
本記事では、VBAのイミディエイトウィンドウで実行できる便利なコードをまとめました。
想定する読者
- Excel VBAの既存マクロを解析・修正する必要がある方
- ボタンとマクロの対応関係を調べたい方
- ActiveXコントロールとフォームコントロールの違いを理解したい方
実行方法
すべてのコードはイミディエイトウィンドウ(Ctrl+G)で実行してください。
基本編
1. シート内の全ボタンとマクロ名を一覧表示
' 指定シート内の全図形オブジェクトと割り当てられているマクロを表示
For Each shp In Worksheets("Sheet1").Shapes
Debug.Print shp.Name & " : " & shp.OnAction
Next
出力例:
Button1 : Module1.ProcessData
Rectangle2 :
Picture3 : Sheet1.UpdateSummary
ポイント:
-
OnActionが空白の場合、マクロは割り当てられていません - シート名(
Sheet1)は適宜変更してください
2. マクロが割り当てられているボタンのみ表示
' マクロが設定されているボタンだけを抽出
For Each shp In Worksheets("Sheet1").Shapes
If shp.OnAction <> "" Then
Debug.Print shp.Name & " → " & shp.OnAction
End If
Next
ポイント:
不要な図形を除外して、マクロ付きボタンだけを確認できます。
3. 特定のボタンを選択して確認
' 指定した図形を選択(どのボタンか視覚的に確認)
Worksheets("Sheet1").Shapes("Button1").Select
使い方:
実行後、Excel画面で選択されたボタンを確認できます。
4. 特定のボタンに割り当てられているマクロ名を表示
' ボタン名を指定してマクロ名を確認
?Worksheets("Sheet1").Shapes("Button1").OnAction
出力例:
Module1.ProcessData
応用編
5. グループ化されたボタンの中身を確認
' グループ内の各パーツとマクロを表示
For Each shp In Worksheets("Sheet1").Shapes("Group1").GroupItems
Debug.Print shp.Name & " : " & shp.OnAction
Next
出力例:
RoundedRectangle1 : Module1.Execute
Picture2 : Module1.Execute
ポイント:
複数の図形を組み合わせたボタンの場合に有効です。
6. グループ内の特定パーツのマクロを確認
' グループ内の特定パーツのマクロを直接確認
?Worksheets("Sheet1").Shapes("Group1").GroupItems("RoundedRectangle1").OnAction
7. キーワードでボタンを検索
' ボタンのテキストから検索(例:「実行」という文字を含むボタン)
For Each shp In Worksheets("Sheet1").Shapes
On Error Resume Next
If InStr(shp.TextFrame2.TextRange.Text, "実行") > 0 Then
Debug.Print shp.Name & " : " & shp.OnAction
End If
Next
ポイント:
キーワード(実行)を検索したい文字列に変更してください。
8. ボタンの詳細プロパティを確認
' ボタンの位置、サイズ、マクロなどを一括表示
With Worksheets("Sheet1").Shapes("Button1")
Debug.Print "名前: " & .Name
Debug.Print "マクロ: " & .OnAction
Debug.Print "位置: (" & .Left & ", " & .Top & ")"
Debug.Print "サイズ: " & .Width & " x " & .Height
End With
出力例:
名前: Button1
マクロ: Module1.ProcessData
位置: (100, 50)
サイズ: 120 x 30
フォームコントロール編
9. ラジオボタン・チェックボックスを検索
' OptionButtonを含む名前の図形を検索
For Each shp In Worksheets("Sheet1").Shapes
On Error Resume Next
If InStr(shp.Name, "Option") > 0 Then
Debug.Print shp.Name & " : " & shp.OnAction
End If
Next
10. フォームコントロールのリンクセルを確認
' フォームコントロール(Type=12)のリンクセルを表示
For Each shp In Worksheets("Sheet1").Shapes
On Error Resume Next
If shp.Type = 12 Then
Debug.Print shp.Name & " → リンクセル: " & shp.ControlFormat.LinkedCell
End If
Next
ポイント:
ラジオボタンやチェックボックスの選択状態が、どのセルに反映されるか確認できます。
ActiveXコントロール編
11. ActiveXコントロールの有無を確認
' シート内のActiveXコントロール数を確認
?Worksheets("Sheet1").OLEObjects.Count
出力:
-
0→ ActiveXコントロールなし(通常の図形ボタン) -
1以上→ ActiveXコントロールあり
12. ActiveXコントロールの一覧を表示
' ActiveXコントロールの名前とタイプを表示
For Each obj In Worksheets("Sheet1").OLEObjects
Debug.Print obj.Name & " (" & obj.progID & ")"
Next
出力例:
CommandButton1 (Forms.CommandButton.1)
ComboBox1 (Forms.ComboBox.1)
13. ActiveXコントロールのプロパティを確認(デザインモード必須)
' デザインモードONの状態で実行
With Worksheets("Sheet1").CommandButton1
Debug.Print "Name: " & .Name
Debug.Print "Caption: " & .Caption
Debug.Print "Enabled: " & .Enabled
End With
注意:
- ActiveXコントロールの場合、デザインモードをONにする必要があります
- コントロール名(
CommandButton1)は実際の名前に置き換えてください
トラブルシューティング
ボタンが右クリックできない場合
- 開発タブ → デザインモード をONにする
- ボタンを右クリック → マクロの割り当て で確認
グループ化されたボタンを調べる場合
' グループ全体の情報
?Worksheets("Sheet1").Shapes("Group1").OnAction
' グループ内の個別パーツ
For Each shp In Worksheets("Sheet1").Shapes("Group1").GroupItems
Debug.Print shp.Name & " : " & shp.OnAction
Next
まとめ
- イミディエイトウィンドウで手軽にボタン情報を確認できる
- フォームコントロールとActiveXコントロールで確認方法が異なる
- グループ化されたボタンは
GroupItemsで個別パーツを調べる
参考
この記事が既存マクロの解析作業のお役に立てば幸いです!