教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA ブック操作】ブック内のシートが右クリックされた時に発生するイベントプロシージャを作成するにはどうすればいいの?教えて!

ブック内のシートが右クリックされた時に発生するイベントプロシージャは「Workbook_SheetBeforeRightClick」を使います。

構文

構文は以下の通りです。

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    ' 実行したいコードを記述する
End Sub

解説

このイベントプロシージャは、Workbookオブジェクト内に作成する必要があります。具体的には、VBAエディタを開き、プロジェクトエクスプローラで対象のワークブックを選択し、シートオブジェクトを選択した状態で右クリックし、コンテキストメニューから「コードの表示」を選択します。すると、イベントプロシージャが表示されるエディタが開きます。

使い方

Workbook_SheetBeforeRightClickイベントは、ワークシート上で右クリックが行われる直前に発生します。このイベントを使用することで、特定の条件に基づいて右クリックの操作を制御することができます。

例えば、あるワークシートの特定のセル範囲に対して右クリックを無効化する場合、以下のようなコードを記述します。

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    If Intersect(Target, Sh.Range("A1:C10")) Is Nothing Then
        ' A1:C10の範囲外が右クリックされた場合、キャンセルする
        Cancel = True
    End If
End Sub

この例では、Sh.Range("A1:C10")で指定したセル範囲外が右クリックされた場合に、Cancel変数をTrueに設定しています。これにより、右クリックが無効化されます。

プログラミング例

以下に、Workbook_SheetBeforeRightClickイベントのプログラミング例を示します。

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    If Target.Row = 5 Then
        ' 5行目が右クリックされた場合、メッセージボックスを表示する
        MsgBox "5行目が右クリックされました"
    ElseIf Target.Column = 2 Then
        ' 2列目が右クリックされた場合、セルの値を変更する
        Target.Value = "クリック済み"
    End If
End Sub

この例では、以下のような動作が行われます。
・ワークシート上で5行目が右クリックされた場合、メッセージボックスが表示されます。
・ワークシート上で2列目が右クリックされた場合、対象のセルの値が「クリック済み」に変更されます。
このように、Workbook_SheetBeforeRightClickイベントを利用することで、右クリックに対するさまざまな制御や処理を実装することができます。

まとめ

Workbook_SheetBeforeRightClickイベントは右クリックが行われる直前に実行されます。使い方の例として、特定の条件に基づいて右クリックを制御する方法を示しました。具体的には、特定のセル範囲の外側や特定の行・列に対する右クリックを無効化したり、特定のセルに対して処理を行ったりすることができます。