【Excel VBA】セルをダブルクリックした時にマクロを実行する方法

エクセルでマクロを実行するとき、ボタンを設置してボタンを押すとマクロを実行するのがシンプルな使い方です。

ですが、対象のセルの値や行・列を取得してマクロを実行させたいという場面もあります。そんな時は、対象のセルをダブルクリックした時にマクロを実行させることもできます。

この記事では、セルをダブルクリックした時にマクロを実行する方法をご紹介します。

目次

セルをダブルクリックした時にマクロを実行するには?

通常のコードは標準モジュールにコードを記述します。

今回紹介する、対象セルをダブルクリックした時にマクロを実行する場合は、対象となるシートにコードを記述します。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) の後にコードを記述することで、ダブルクリックでマクロを実行することができます。

ダブルクリックした時にセルの値を取得する方法

セルをダブルクリックした時に値を取得するには、「Target」を使います。

ここでは、よく使われるセルの行、セルの列、セルの値を取得する方法について説明します。

Target.Row

ダブルクリックしたセルの行の値を取得します。

Target.Column

ダブルクリックしたセルの列の値を取得します。

Target.Value

ダブルクリックしたセルの値を取得します。

Target.○○の○○を通常のセルを扱うときと同じ様に扱うことができます。

(具体例)対象セルの行列と対象セルの値を表示する方法

以下のコードは、対象セルの行と列と対象セルの値を表示することができます。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

 '➀ダブルクリックしたセルの行と列を表示する。
 MsgBox "行:" & Target.Row & " 列:" & Target.Column

 '➁ダブルクリックしたセルの値を表示する。
 MsgBox Target.Value

End Sub

<実行結果>

①実行結果
➁実行結果

ダブルクリックで実行するする際に合わせて使いたいコード

ダブルクリックしたときにマクロを実行してみると、

  • 実行する範囲を指定するには?
  • 結合されたセルだとエラーが発生する
  • ダブルクリックした後、セルの入力状態になるのが気になる

といった要望や疑問が出てくると思います。

そこで、上記2点について解決するコードを合わせてご紹介します。

ダブルクリック時に実行する範囲(エリア)を指定する方法

Application.Intersectメソッドを使って、セル範囲を指定することができます。

Application.Intersect(A,B)

これは、AとBで重複する範囲を返すメソッドで、これを使って対象範囲を指定することができます。

Intersectメソッドは、近いうち別の記事で説明したいと思います。

Application.は省略することができます。

次のコードのようにIntersectを使って範囲(エリア)を指定することで、B2~F6の範囲に対してダブルクリック時にマクロを実行することができます。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

 'ダブルクリック時に実行するセル範囲を指定する。
 If Intersect(Target, Range("B2:F6")) Is Nothing Then Exit Sub

 'ダブルクリックしたセルの値を表示する。
 MsgBox Target.Value

End Sub

結合セルをダブルクリックしたときにエラーが発生する

結合したセルの場合、上記のコードだとエラーが出て実行できないことがあります。

結合したセルは、左上のセルが基準となりますので、Target.Cells(1,1)に変えるとうまく動作します。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

 'ダブルクリック時に実行するセル範囲を指定する。
 If Intersect(Target, Range("B2:F6")) Is Nothing Then Exit Sub
 'ダブルクリックしたセルの値を表示する。
 MsgBox Target.Cells(1,1).Value

End Sub

ダブルクリックした後のアクティブを解除する

ダブルクリックでマクロを実行した後は、ダブルクリックしたセルを入力する状態(アクティブ)になります。

次のコードのように、Cancel = Trueを記述することで、ダブルクリックした後のアクティブを解除することができます。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

 'ダブルクリックしたセルの値を表示する。
  MsgBox Target.Value
  'アクティブを解除
  Cancel = True

End Sub

まとめ

この記事では、セルをダブルクリックしたときにマクロを実行する方法についてご紹介しました。

使い勝手がいいコードですのでぜひ覚えて試して下さい。

①Sheet→②Worksheet→③Before DoubleClickの後にコードを記述する

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次