Worksheet_BeforeDoubleClickでマクロを実行
マクロ 04回
特定のセルをダブルクリックして処理を実行したい
セルを選択したらマクロを実行というのも便利でしたが、クリックで実行されるのもちょっと怖いという場合がありますよね。
何気なく、移動したらマクロが実行されてしまうわけです。
そういう場合に、ダブルクリックしたらマクロを実行するという、Worksheet_BeforeDoubleClickイベントマクロを作成してみましょう。
ダブルクリックでデータを取得
1. 最初は以前にも、やりましたが、ダブルクリックしたらそのセルのアドレスを表示するというマクロを作ります。
MsgBox Target.Address(False, False)の部分は、MsgBox Target.Address(0, 0)でも同じです。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) MsgBox Target.Address(False, False) End Sub
2. シート上のどこでもダブルクリックしたセルのアドレスを表示します。
Intersectメソッド
シートの特定セルをダブルクリックで処理を実行
3.特定のセル範囲をダブルクリックした時にデータを取得するには、どのように書けばよいでしょうか。
たとえばB列とC列、D列の値をコピーしたい時などは、
まず、ダブルクリックの範囲を特定する必要があります。この場合のコードの書き方で便利なのが、
Intersect(Target, Range("B2:D9")) .Address
これは、Intersectメソッドで「ある範囲Targetが範囲Range("B2:D9")に入っているかどうか」を判定します。
このまま使うと、範囲のアドレスを取得するかというような使い道になりますが、アドレスを取得する必要はなくて、『あるかどうかだけ』を知りたいのです。
そこで、If ~~ Is Nothing Then という形にし
If Not Intersect(Target, Range("B2:D9")) Is Nothing Then MsgBox "ダブルクリックしたね" End If
結果がNothingでなかった時には、含まれていることになるので、メッセージを表示するというわけです。
4. ダブルクリックしたセルの行は、Target.Row で取得できます。
”B2”セルをダブルクリックしたのであれば、
Cells(Target.Row, 2).Valueで ”B2”の値の意味になります。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _ Cancel As Boolean) If Not Intersect(Target, Range("B2:D9")) Is Nothing Then MsgBox Cells(Target.Row, 2).Value & vbCrLf & _ Cells(Target.Row, 3).Value & vbCrLf & _ Cells(Target.Row, 4).Value End If End Sub
5. 上記コードを実行すると、下図のように、メッセージボックスにクリックした行のデータが表示されます。
6. 次回は、このWorksheet_BeforeDoubleClickの違う例と、引数Cancel As Boolean について説明します。