「セルのダブルクリックでマクロ実行」
という検索が行われていました。
VBA(Visual Basic for Applications)でマクロを記述していて、セルをダブルクリックしたときにマクロを実行するにはどうしたらいいのか、疑問に感じた方による検索です。
セルをダブルクリックしたときにマクロを実行させるには、ワークシートのBeforeDoubleClickイベントプロシージャからマクロを呼べばOKです。
※セルのダブルクリックでMacro_Sampleマクロを実行する例
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Call Macro_Sample
Cancel = True
End Subまず標準モジュールに以下のようなマクロを作成したと想像してください。
Sub Macro_Sample()
MsgBox "Hello Excel World !!"
End Sub
「Hello Excel World !!」というメッセージボックスを表示するだけのマクロです。
このMacro_Sampleマクロを、Worksheet_BeforeDoubleClickイベントプロシージャから呼んでいるのが、「Call Macro_Sample」という部分です。
この一行だけで、セルをダブルクリックしたときにMacro_Sampleマクロが実行され、「Hello Excel World !!」というメッセージボックスが表示されます。
ところが、「Call Macro_Sample」という一行だけのWorksheet_BeforeDoubleClickイベントプロシージャを作り、セルをダブルクリックした場合、確かにMacro_Sampleマクロが実行され、「Hello Excel World !!」というメッセージボックスが表示されるのですが、メッセージボックスの[OK]ボタンをクリックしたあとに、セルの中にカーソルが入った状態になります。
Macro_Sampleマクロが実行されたあとに、通常のセルのダブルクリック操作が実行され、セル内にカーソルが入ったわけです。
セルの中にカーソルを入れないようにするのが、「Cancel = True」の部分です。
Worksheet_BeforeDoubleClickイベントプロシージャの第2引数「Cancel」に「True」を与えることで、ダブルクリックイベントがキャンセルされます。
セルのダブルクリックでマクロを実行して、その後ダルブクリックしたセル内にカーソルが入った状態になってよければ、「Cancel = True」は不要です。
▼サンプルファイル(013870.xls 32KByte)ダウンロード
サンプルファイルの標準モジュールには、「Hello Excel World !!」メッセージを表示するMacro_Sampleマクロを、「ダブルクリックでマクロ実行」ワークシートには「Cancel = True」の入れてあるWorksheet_BeforeDoubleClickイベントプロシージャを、「ダルブルクリックでマクロ実行_Cancelなし」ワークシートには「Cancel = True」の入っていないWorksheet_BeforeDoubleClickイベントプロシージャをそれぞれ作成してあります。
それぞれのワークシートでセルをダブルクリックしたときに、どのような動きをするかなどをご確認ください。
- Newer:Office2010・2007のクリップボード表示方法
- Older:Excel2010でセルに数式を表示する
Home » エクセルマクロ・Excel VBAの使い方 » イベントプロシージャ » セルをダブルクリックしてマクロを実行する-Worksheet_BeforeDoubleClickインベントプロシージャ