右クリックメニューに独自のコマンドを追加する


セルを右クリックしたときに表示されるショートカットメニューに、独自のコマンドを追加するには次のようにします。

Sub AddMenu()
    Dim Newb As CommandBarControl
    Set Newb = CommandBars("Cell").Controls.Add()
    With Newb
        .Caption = "独自のコマンド"
        .OnAction = "Sample"
    End With
End Sub

Sub Sample()
    MsgBox "tanaka"
End Sub

CommandBars("Cell")が、セルの右クリックメニューを表しています。標準モジュールに記述するマクロでしたら、このままで動作しますが、もし標準モジュールではないモジュール(ドキュメントモジュールやUserFormモジュールなど)に記述するときは、Application.CommandBars("Cell")のように、Applicationをつけてください。

上記のコードは、右クリックメニューのメニュー項目(Controls)に、新しい項目を追加(Add)しています。その追加した新しい独自の項目を、一度オブジェクト変数に入れています。このとき、オブジェクト変数の型は、上記のようにCommandBarControlを指定しますが、分からなかったらバリアント型(Variant)でもOKです。

Sub AddMenu()
    Dim Newb As Variant
    Set Newb = CommandBars("Cell").Controls.Add()
    With Newb
        .Caption = "独自のコマンド"
        .OnAction = "Sample"
    End With
End Sub

あるいは次のように、Withステートメントを使う手もあります。

Sub AddMenu()
    With CommandBars("Cell").Controls.Add()
        .Caption = "独自のコマンド"
        .OnAction = "Sample"
    End With
End Sub

記述が短くなるので、私はよくこの書き方をします。いずれにしても実行すると、セルの右クリックメニューに新しいコマンドが追加され、そのコマンドをクリックすると、指定したプロシージャ(ここではSample)が実行されます。

メニュー項目を削除するには、Deleteメソッドを使います。

Sub DeleteMenu()
    CommandBars("Cell").Controls("独自のコマンド").Delete
End Sub

あるいは、Resetメソッドを使うと、ユーザーが追加したすべての独自コマンドが削除されて、Excelの標準状態に戻せます。

Sub ResetMenu()
    CommandBars("Cell").Reset
End Sub

アクセスキーを指定する

メニュー項目には一般的にアクセスキーが設定されています。

アクセスキーとは、メニューを表示した状態で、そのキーを押すと、そのメニュー項目が"クリックされたことにする"というキーです。独自のコマンドにもアクセスキーを設定しておくと、たとえばShift+[F10]で右クリックメニューを開き、すかさずアクセスキーを押すことで、キーボードによる操作が可能になって超便利です。

アクセスキーは、独自のコマンドを追加するときのCaptionプロパティに指定しますが、

        .Caption = "独自のコマンド(B)"

のように、ただアルファベットを記述するだけでは、アクセスキーにはなりません。これでは、ただ「(B)」という文字列を指定したことになります。アクセスキーを指定するときは、アルファベットの前に「&」をつけます。

        .Caption = "独自のコマンド(&B)"

この項目を削除するときは

    CommandBars("Cell").Controls("独自のコマンド(&B)").Delete

または

    CommandBars("Cell").Controls("独自のコマンド(B)").Delete

とします。

追加する位置を指定する

上記のように、何も指定しないと、独自のコマンドはメニューの一番下に追加されます。追加する位置を指定するには、AddメソッドのBeforeオプションを指定します。既存メニュー項目のうち、Beforeオプションで指定した位置の直前に新しい項目が追加されます。

Sub AddMenu()
    With CommandBars("Cell").Controls.Add(Before:=1)
        .Caption = "独自のコマンド(&B)"
        .OnAction = "Sample"
    End With
End Sub

Sub AddMenu()
    With CommandBars("Cell").Controls.Add(Before:=4)
        .Caption = "独自のコマンド(&B)"
        .OnAction = "Sample"
    End With
End Sub