ラピードアクト株式会社

技術記事:ExcelVBAで仕事を効率化しようVol.27

みなさん、こんにちは。
ITソリューション事業部の林です。

本記事では、ExcelVBAのテクニックを紹介・解説いたします。

今回紹介するのは、「セルダブルクリック時にイベントを発生させる」です。

【目次】

  1. セルのダブルクリックでイベント発生させるには?
  2. Worksheet_BeforeDoubleClickの設定方法
  3. イベント引数について
  4. Worksheet_BeforeDoubleClickイベントの使用例

それでは、始めましょう!

セルのダブルクリックでイベント発生させるには?

セルのダブルクリックでイベントを起こすには、Worksheet_BeforeDoubleClickイベントを利用します。
これはWorksheetイベントの一種です。
前回の記事(Vol.26)で紹介したWorksheet_SelectionChangeに近いものになります。
異なる点としては、イベント発生起因がセルのダブルクリック時であるという点です。

Worksheet_BeforeDoubleClickの設定方法

イベントを設定するには、以下の手順で操作します。

①VBAエディタを開く
②プロジェクトエクスプローラのSheet1 (Sheet1)をダブルクリックする


③コードウインドウ上部のドロップダウンリストで、左側リストからWorksheetを選択する
④コードウインドウ上部のドロップダウンリストで、右側リストからBeforeDoubleClickを選択する


⑤コードウインドウにWorksheet_BeforeDoubleClickイベントプロシージャが作成される

以上がイベントの設定手順になります。

イベント引数について

Worksheet_BeforeDoubleClickイベントプロシージャでは、TargetCancelという引数が使用できます。

Target引数には、ユーザー操作が行われたセルの情報が記録されています。
Target引数はRangeデータ型として定義されていますので、イベントプロシージャで利用可能です。
利用するときは、Target.RowやTarget.Columnなど、Range型変数として扱います。

Cancel引数は、少し特徴的なものとなります。
この引数はBoolean型の値が設定可能で、デフォルト値(False)のままだと何の影響も及ぼしませんが、
Trueを設定することで、ダブルクリック時の挙動をキャンセルさせることが可能になります。

どういうことか、以下に例を挙げて説明します。
A1セルのダブルクリックした時、そのA1セルに黄色背景を設定するBeforeDoubleClickイベントを設定します。

このとき、Cancel引数がデフォルト(False)のままだと、A1セルは入力モードになります(画面左下が"入力")。

対して、Cancel引数にTrueを設定していると、A1セルは入力モードになりません(画面左下が"準備完了")。

この違いは、セルのダブルクリック時の挙動=セル入力モードへの遷移 をキャンセルする/しないの違いです。
セルをダブルクリックするたびに入力モードへ遷移するのが煩わしいときは、Cancel引数にTrueを設定しましょう。
どちらに設定すればよいかわからないときは、Trueにしておくことをお勧めします
理由としては、BeforeDoubleClickイベントプロシージャの後に入力モードへ遷移すると、入力モードが終わるまでは画面が固定されてしまい、イベントの処理によっては思わぬ挙動をすることがあるからです。

Worksheet_BeforeDoubleClickイベントの使用例

使用例① ダブルクリックしたセルのアドレスをポップアップ表示

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    MsgBox "ダブルクリックしたセルアドレス:" + Target.Address
    Cancel = True
End Sub

【表示例(B2セルをダブルクリックした場合)】

使用例② 指定セルのダブルクリックでカウントアップ
A1セルをダブルクリックするたびに1ずつカウントアップします。

入力モードへ遷移させないために、Cancel引数はTrueに設定します。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Row = 1 And Target.Column = 1 Then
        Target.Value = Target.Value + 1
        Cancel = True
    End If
End Sub

使用例③ ダブルクリックでExcelファイルを開く
セルに入力されているファイルパスを読み取り、Excelファイルを開きます。

指定したファイルパスの場所にファイルがあることを確認してから実行してください。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If (Target.Row >= 2 And Target.Row <= 4) And Target.Column = 1 Then
        Workbooks.Open Filename:=Target.Value
        Cancel = True
    End If
End Sub

今回の記事は以上になります。

それでは、また次回お会いしましょう!