VBAでセルのダブルクリックを検知する

Worksheet_BeforeDoubleClickイベント

セルをダブルクリックしたことを検知するには、セルがある対象のシートにWorksheet_BeforeDoubleClickという名前の関数を作ります。

このようなイベント関連のプロシージャは基本的に自分で書かずに以下の手順で作成してください。

  1. 対象シートのコードを開く。
  2. Worksheetオブジェクトを選択する。このときWorksheet_SelectionChangeプロシージャが作成されますが、これは使いませんので後で削除します。
  3. BeforeDoubleClickイベントを選択する。
  4. これでWorksheet_BeforeDoubleClickが作成されます。
  5. 先に作成されていたWorksheet_SelectionChangeプロシージャは不要なため削除する。

あとは、Worksheet_BeforeDoubleClickプロシージャの中で、セルがダブルクリックされた際に行いたい処理を書いていくことになります。

構文

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

Target ダブルクリックした際のセルのRangeオブジェクトが設定されます。

結合セルをダブルクリックした場合はそのセル範囲のRangeオブジェクトが設定されます。

Cancel プロシージャを終了後に対象セルを編集状態にするかしないかを設定します。

ダブルクリックイベントが発生した際にはFalseが設定された状態で渡されます。

Falseのままだとプロシージャの処理終了後にダブルクリックしたセルにカーソルが当たり編集状態になりますが、Trueに変更した場合は編集状態になりません。

ダブルクリックしたセルを特定する

ダブルクリックを行ったセルを特定するには、Worksheet_BeforeDoubleClickプロシージャの第一引数のRangeオブジェクトを利用します。

Rangeオブジェクトのため、セル操作で利用するメソッドやプロパティを利用できます。

例えばダブルクリックしたセルの座標を取得するには以下のようにAddressプロパティを利用します。

このように第一引数のRangeオブジェクトを使ってセル操作を行うことが可能です。

結合セルをダブルクリックした場合

結合セルをダブルクリックした場合は、その結合セルを構成するセル範囲が第一引数のRangeオブジェクトとして利用することが出来ます。

上のコードをそのまま使って以下のようにA1からC2まで結合しているセルをダブルクリックすると、、、

結合セル範囲のA1:C2がDebug.Printにて出力されます。

関連記事

サブコンテンツ

このページの先頭へ