Worksheet_BeforeDoubleClickでマクロを実行

セルをダブルクリックしてマクロを実行
BeforeDoubleClick

リンクユニット


マクロ 04回

特定のセルをダブルクリックして処理を実行したい

セルを選択したらマクロを実行というのも便利でしたが、クリックで実行されるのもちょっと怖いという場合がありますよね。
何気なく、移動したらマクロが実行されてしまうわけです。
そういう場合に、ダブルクリックしたらマクロを実行するという、Worksheet_BeforeDoubleClickイベントマクロを作成してみましょう。

ダブルクリックでデータを取得

1. 最初は以前にも、やりましたが、ダブルクリックしたらそのセルのアドレスを表示するというマクロを作ります。
MsgBox Target.Address(False, False)の部分は、MsgBox Target.Address(0, 0)でも同じです。


BeforeDoubleClick1 border=0
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 MsgBox Target.Address(False, False)
End Sub

2. シート上のどこでもダブルクリックしたセルのアドレスを表示します。


BeforeDoubleClick2 border=0

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でなかった時には、含まれていることになるので、メッセージを表示するというわけです。

BeforeDoubleClick3 border=0

4. ダブルクリックしたセルの行は、Target.Row で取得できます。
”B2”セルをダブルクリックしたのであれば、
Cells(Target.Row, 2).Valueで ”B2”の値の意味になります。


BeforeDoubleClick4 border=0
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. 上記コードを実行すると、下図のように、メッセージボックスにクリックした行のデータが表示されます。


BeforeDoubleClick5 border=0

6. 次回は、このWorksheet_BeforeDoubleClickの違う例と、引数Cancel As Boolean について説明します。