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

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

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

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

通常のコードはモジュールにコードを記述します。セルをダブルクリックした時にマクロを実行する場合は、対象のシートにコードを記述します。

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

セルをダブルクリックした時にマクロを実行するのはどんな時に使う?

セルをダブルクリックした時に実行するマクロは、例えば、ダブルクリックした対象セルの行列を取得したり、対象セルの値を取得して使う場面に使えます。

具体例:対象セルの行列を表示する、対象セルの値を表示する。

次のコードは、①ダブルクリックしたセルの行と列の値を表示する、②ダブルクリックしたセルの値を表示する。コードになります。

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

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

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

End Sub

<実行結果>

合わせて使いたいコード

ダブルクリックしたときにマクロを実行する場合、上記のコードを実行してみると、

  • 範囲を指定したい
  • ダブルクリックした後セルがアクティブになるのが嫌だ

といった要望が出てくると思います。上記2点について解決するコードを合わせてご紹介します。

ダブルクリック時に実行するエリアを指定する

次のコードのように範囲(エリア)を指定することで、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

コメント

タイトルとURLをコピーしました