セルを右クリックすると、Excelには機能豊富なコンテキストメニューが表示され、さまざまな操作を実行できます。特に頻繁に使用する機能である場合は、そのコンテキストメニューにいくつかの機能を追加することをお勧めします。

残念ながら、[ツール]メニューの[カスタマイズ]を使用して、他のメニューを編集するのと同じ方法でコンテキストメニューを編集することはできません。代わりに、VBAを介してコンテキストメニューを操作する必要があります。

セルを右クリックしたときに表示されるコンテキストメニューに項目を追加する場合は、次のコードを使用できます。

Sub AddItemToContextMenu()

Dim cmdNew As CommandBarButton     Set cmdNew = CommandBars("cell").Controls.Add

With cmdNew         .Caption = "My Procedure"

.OnAction = "MyProcedure"

.BeginGroup = True     End With End Sub
Captionプロパティを使用するメニューテキストに設定してから、.OnActionプロパティを変更して、使用するマクロまたはコマンドを指すようにするだけです。後でメニューオプションを削除する場合は、次のマクロを使用できます。
Sub RemoveContextMenuItem()

On Error Resume Next     CommandBars("cell").Controls("My Procedure").Delete End Sub

これを使用するには、「MyProcedure」テキストを前のマクロの.Captionプロパティで使用したテキストに変更します。指定されたマクロ項目が以前に追加されていない場合に備えて、このマクロではOnErrorステートメントが使用されます。

マクロを少し変更することで、特定のセルを右クリックしたときにのみコンテキストメニューへの追加が行われるように指定できます。次のマクロは、C10:E25の範囲のセルをクリックしているかどうかを確認します。そうである場合は、コンテキストメニューの最後にプロシージャのメニューオプションが追加されます。

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, _   Cancel As Boolean)

Dim cmdNew As CommandBarButton

For Each icbc In Application.CommandBars("cell").Controls         If icbc.Tag = "brccm" Then icbc.Delete     Next icbc

If Not Application.Intersect(Target, Range("c10:e25")) _       Is Nothing Then         Set cmdNew = CommandBars("cell").Controls.Add         With cmdNew             .Caption = "My Procedure"

.OnAction = "MyProcedure"

.BeginGroup = True             .Tag = "brccm"

End With     End If End Sub

VBAエディターで、このマクロを使用する特定のワークシートに追加する必要があります。プロジェクトエクスプローラー(VBAエディターの左上隅)でそのワークシートをダブルクリックし、そのワークシートのコードウィンドウに入力するだけです。

以前のマクロと同様に、必要なのは.Captionプロパティと.OnActionプロパティに指定された設定を変更することだけです。さらに、メニュー選択を追加するときに「有効」と見なされるセル範囲を変更することもできます。「c:10:e25」範囲の指定を目的の範囲に変更するだけです。セル範囲の代わりに名前付き範囲を使用することもできます。これは、有効な範囲が実際には連続していないセルのセットである場合に最適です。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(2064)は、Microsoft Excel 97、2000、2002、および2003に適用されます。