Worksheet_BeforeRightClick
マクロ 08回
右クリックすると条件付き書式ダイアログボックスを表示する
今回はダブルクリックすると、条件付き書式設定のダイアログボックスが表示されるようにしてみましょう。
頻繁に条件付き書式を設定するようなときに、そのダイアログボックスを一瞬で表示できたら便利です。
そこで今回はワークシートのイベントで行いたいと思います。
条件付き書式を設定したい範囲と言うのはこの表のデータの部分です 。
(サンプルファイルは、こちらから
マクロ08回サンプルデータ)
規定の動作をキャンセルする
1. Visual Basic Editorを起動します。Sheet1を選択してコード画面を表示させて、オブジェクトボックスをクリックします。するとデフォルトのイベントマクロの型が入力されますが、使うのは、BeforeRightClick なので、プロシージャボックスからBeforeRightClick を選択してください。
2. デフォルトで、最初に入力された規定のコードはSelectionChangですが、これは削除して大丈夫です。
3. そして、イベント実行後に、右クリックを実行しなくて良いので、規定の動作をキャンセルする、Cancel = Trueを記述します。
4. では条件付き書式を設定するダイアログボックスを表示するコードを追加します。Application.Dialogs(XlBuiltinDialogの定数)
Applicationは、この場合Excelのことで、DialogsはDialogのコレクション(集合体)になります。引数としてxlDialogConditionalFormattingを指定すると、条件付き書式設定のダイアログボックスを表示します。
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, _ Cancel As Boolean) Application.Dialogs(xlDialogConditionalFormatting).Show Cancel = True End Sub
5.では範囲を右クリックしてイベントを実行させましょう。このように条件付き書式設定のダイアログボックスを表示することができました。
ただ、範囲を限定してないので、どこを右クリックしてもダイアログボックスが表示されてしまいます。
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
インタセクトメソッドで指定した範囲を右クリックすると、条件付き書式設定のダイアログボックスを表示することができ、それ以外を右クリックした場合は、右クリックメニューが表示されます。