Excel VBA 右クリックメニューにマクロ実行メニューを追加する

スポンサーリンク

右クリックメニューにマクロ実行メニューを追加する方法

Excelになれていない人にマクロを実行してもらう場合右クリックメニューにマクロ実行メニューがあると扱いやすくなると思います。

VBAでは「メニューバー」「ツールバー」「ショートカットメニュー」を総称して「コマンドバー」といいます。そのコマンドバーを制御するには、コマンドバーを表すCommanBar【コマンドバー】オブジェクトを使用します。CommanBar【コマンドバー】オブジェクトはCommandBars【コマンドバーズ】プロパティを使用して参照します。

CommandBars【コマンドバーズ】プロパティ

コマンドバーを表すCommanBar【コマンドバー】オブジェクトを取得するには、Application【アプリケーション】オブジェクトのCommandBars【コマンドバーズ】プロパティを使用します。

CommandBars【コマンドバーズ】プロパティの書式の書式と設定値(引数)の説明

[]内は省略可能です。
[オブジェクト.]CommandBars[(コマンドバー名)]
【戻り値】CommanBar【コマンドバー】オブジェクト

  • オブジェクト(省略可)
    Application【アプリケーション】オブジェクトを指定します。省略可能で通常は省略します。
  • コマンドバー名(省略可)
    参照したいコマンドバー名を文字列型で指定します。省略した場合はコマンドバーの集合体を表すCommandBars【コマンドバーズ】コレクションを参照します。
主な標準の組み込みコマンドのコマンド名一覧
コマンド名 内容
Cell セルを右クリックしたとき表示される
ショートカットメニュー
Ply シート見出しを右クリックしたとき表示される
ショートカットメニュー
Standard 標準ツールバー
Formatting 書式設定ツールバー
Drawing 図形描画ツールバー
Worksheet Menu bar ワークシートメニューバー
Chart Menu bar グラフメニューバー

Controls【コントロールズ】プロパティ

VBAでは、コマンドバーに配置されているメニューやボタンなどの各要素をCommandBarControl【コマンドバーコントロール】オブジェクトとして扱います。そのCommandBarControl【コマンドバーコントロール】オブジェクトを参照するにはCommandBar【コマンドバー】オブジェクトのControls【コントロールズ】プロパティプロパティを使用します。

Controls【コントロールズ】プロパティの書式と設定値の説明

オブジェクト.Controls
【戻り値】CommandBarControl【コマンドバーコントロール】オブジェクト

  • オブジェクト(必須)
    コマンドバーを表すCommandBar【コマンドバー】オブジェクトを指定します。

右クリックショートカットメニューにメニューを追加するコードと解説

Sub コマンド追加()
With CommandBars("cell").Controls.Add
.Caption = "マクロ実行"
End With
End Sub
2行目【 With CommandBars(“cell”).Controls.Add】
Application【アプリケーション】オブジェクトのCommandBars【コマンドバーズ】プロパティの引数に”cell”を設定して、セルをマウスで右クリックしたときに表示されるショートカットメニューを参照しControls【コントロールズ】プロパティでショートカットメニューに配置されているメニューを参照して、CommandBarControls【コマンドバーコントロールズ】コレクションのAdd【アド】メソッドを使用して新しいメニューを追加しWith【ウィズ】ステートメントで指定します。


3行目【.Caption = “マクロ実行”】
Withステートメントで指定した新たに追加したショートカットのメニューを表すCommandBarControl【コマンドバーコントロール】オブジェクトのCaption【キャプション】プロパティで追加したメニューに「マクロ実行」という名前を付けて表示します。

実行結果


※注意しなくてはいけないことは、このメニュー追加は、
このWorkbookだけではなくて、すべてのWorkbookに適用されます。

追加した右クリックショートカットメニューを削除するコード

Sub コマンド削除()
CommandBars("cell").Controls("マクロ実行").Delete
End Sub

いつでも、コマンドを削除できるように、同じモジュール内にコマンド削除のコードも記述しておきましょう

コマンドの登録位置を指定する方法

実行結果からわかるように、追加したコマンドはメニューの一番下に追加されます。コマンドを追加するAdd(アド)メソッドでは、追加する位置を指定できます。引数Before【ビフォア】に番号を指定すると、指定した番号のメニューの上にコマンドが追加されます。

メニューの一番上にコマンドを追加するコード

Sub コマンド追加()
With CommandBars("cell").Controls.Add(Before:=1)
.Caption = "マクロ実行"
End With
End Sub

実行結果

コマンドにサブメニューを追加する

追加したコマンドにサブメニューを追加することもできます。サブメニューを登録するには、Add【アド】メソッドの引数Typeに定数msoControlPopup(エムエスオーコントロールポップアップ)を指定します。こうして登録したコントロールは、サブメニューになるので
そのサブメニューに新たなコマンドを登録します。

サブメニュー付きのコマンド追加コード

Sub コマンド追加()
With CommandBars("cell").Controls.Add(Before:=1, Type:=msoControlPopup)
.Caption = "マクロ実行"
With .Controls.Add
.Caption = "マクロ1"
End With
With .Controls.Add
.Caption = "マクロ2"
End With
End With
End Sub

実行結果

コマンドにマクロを設定する方法

追加したコマンドにマクロを設定するにはOnAction(オンアクション)プロパティに実行したいプロシージャ―の名前を登録します。

追加したサブコマンドにプロシージャ呼び出しを設定したコード

Sub コマンド追加()
With CommandBars("cell").Controls.Add(Before:=1, Type:=msoControlPopup)
.Caption = "マクロ実行"
With .Controls.Add
.Caption = "マクロ1"
.OnAction = "マクロ1"
End With
With .Controls.Add
.Caption = "マクロ2"
.OnAction = "マクロ2"
End With
End With
End Sub

設定したプロシージャ マクロ1とマクロ2のコード

Sub マクロ1()
MsgBox "マクロ1"
End Sub
Sub マクロ2()
MsgBox "マクロ2"
End Sub

プロシージャは実行されるとメッセージBOXにマクロ1 マクロ2と表示されます。同じモジュール内に記述しました。

実行結果


以上で、右クリックメニューにマクロ実行メニューを追加する方法についての解説を終了します。ありがとうございました。

スポンサーリンク

関連記事・広告