Worksheet_BeforeRightClick

Worksheet_BeforeRightClick
Worksheet_BeforeRightClick

リンクユニット


マクロ 08回

右クリックすると条件付き書式ダイアログボックスを表示する

今回はダブルクリックすると、条件付き書式設定のダイアログボックスが表示されるようにしてみましょう。
頻繁に条件付き書式を設定するようなときに、そのダイアログボックスを一瞬で表示できたら便利です。
そこで今回はワークシートのイベントで行いたいと思います。
条件付き書式を設定したい範囲と言うのはこの表のデータの部分です 。

(サンプルファイルは、こちらから マクロ08回サンプルデータ

規定の動作をキャンセルする

1. Visual Basic Editorを起動します。Sheet1を選択してコード画面を表示させて、オブジェクトボックスをクリックします。するとデフォルトのイベントマクロの型が入力されますが、使うのは、BeforeRightClick なので、プロシージャボックスからBeforeRightClick を選択してください。


Worksheet_BeforeRightClick1

2. デフォルトで、最初に入力された規定のコードはSelectionChangですが、これは削除して大丈夫です。


Worksheet_BeforeRightClick2

3. そして、イベント実行後に、右クリックを実行しなくて良いので、規定の動作をキャンセルする、Cancel = Trueを記述します。


Worksheet_BeforeRightClick3

4. では条件付き書式を設定するダイアログボックスを表示するコードを追加します。Application.Dialogs(XlBuiltinDialogの定数)
Applicationは、この場合Excelのことで、DialogsはDialogのコレクション(集合体)になります。引数としてxlDialogConditionalFormattingを指定すると、条件付き書式設定のダイアログボックスを表示します。


Worksheet_BeforeRightClick4
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, _
    Cancel As Boolean)
    Application.Dialogs(xlDialogConditionalFormatting).Show
    Cancel = True
End Sub

5.では範囲を右クリックしてイベントを実行させましょう。このように条件付き書式設定のダイアログボックスを表示することができました。
ただ、範囲を限定してないので、どこを右クリックしてもダイアログボックスが表示されてしまいます。


Worksheet_BeforeRightClick5

Intersectメソッド

シートの特定セルを対象に右クリックで処理を実行

6.特定のセル範囲を右クリックした時に処理を実行するには、どのように書けばよいでしょうか。
イベントマクロ4回でも説明しましたが、 たとえば範囲A2:G10に限定したい時など、 まず、右クリックの範囲を特定する必要があります。この場合のコードの書き方で便利なのが、

Intersect(Target, Range("A2:G10")) .Address

これは、Intersectメソッド「ある範囲Targetが範囲Range("A2:G10")に入っているかどうか」を判定します。
このまま使うと、範囲のアドレスを取得するかというような使い道になりますが、アドレスを取得する必要はなくて、『あるかどうかだけ』を知りたいのです。
そこで、If ~~ Is Nothing Then という形にし

    If Not Intersect(Target, Range("A2:G10")) Is Nothing Then
    	実行したいコード
    End If

結果がNothingでなかった時には、含まれていることになるので、マクロ実行をするというわけです。

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, _
    Cancel As Boolean)
    If Not Intersect(Target, Range("A2:G10")) Is Nothing Then
         Application.Dialogs(xlDialogConditionalFormatting).Show
    Cancel = True
    End If
End Sub

インタセクトメソッドで指定した範囲を右クリックすると、条件付き書式設定のダイアログボックスを表示することができ、それ以外を右クリックした場合は、右クリックメニューが表示されます。


Worksheet_BeforeRightClick6