教えて!ExcelVBA!

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

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

構文

構文は以下の通りです。

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

解説

Workbook_SheetBeforeRightClickイベントプロシージャは、ブック内のシートが右クリックされた時に実行されます。引数は以下の内容となります。

引数 内容
sh イベントが発生したシートを表します。
Target 右クリックが行われたセルや範囲を表します。
Cancel イベントのキャンセルフラグで、Trueに設定するとイベントがキャンセルされます。

使い方

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

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イベントプロシージャは、右クリックされた時に実行されます。具体的には、特定のセル範囲の外側や特定の行・列に対する右クリックを無効化したり、特定のセルに対して処理を行ったりすることができます。