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