本ブログでは、ExcelVBAの基礎文法(変数、If文、Loop、プロシージャなど)を学んできた。これまでのマクロは「ボタンを押したり、VBA画面から実行ボタンを押して動かす」というものだった。
今回からスタートする新章では、「ユーザーが特定の操作をしたときに自動で動くマクロ」を扱っていく!
- 「セルをダブルクリックしたらマクロを動かしたい」
- 「セルの値を変更した瞬間に自動で計算させたい」
このような「特定の操作(イベント)」をきっかけに動く仕組みを「イベントプロシージャ」と呼ぶ。
今回はその第一歩として、「セルをダブルクリックしたときに動くマクロ」の基本を分かりやすく解説しよう!
イベントプロシージャ」ってなに?
通常のプロシージャ(Sub テスト() のようなもの)は、我々が「実行!」と命令したときに動く。
一方、イベントプロシージャは、Excel内で特定の出来事(イベント)が起きたことを検知して自動的に呼び出される特殊なプロシージャである。
よく使われるイベントの例
- セルをダブルクリックしたとき(
BeforeDoubleClick) - セルを右クリックしたとき(
BeforeRightClick) - セルの値が書き換わったとき(
Change) - シートが開かれたとき(
Activate)
ここが重要!「シートモジュール」に書こう
これまでの第1〜7回では、VBAエディタの「挿入」メニューから「標準モジュール」を作成してコードを書いていた。
しかし、シートの操作に反応するイベントプロシージャは「シートモジュール」という場所に書く必要がある。
設定手順
- キーボードの
Alt+F11を押してVBAエディタを開く - 左側のプロジェクトウィンドウから、動かしたいシート(例:
Sheet1)をダブルクリックする - 開いた白い画面(これがシートモジュール)にコードを書く
💡 ポイント
「標準モジュール」に書いてもイベントは反応しないので注意しよう!
ダブルクリックでメッセージを出すコードを書いてみよう
では、実際にコードを書いてみましょう!
シートモジュールを開いて、以下のコードをそのまま貼り付けてみよう。
VBA
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
' メッセージを表示する
MsgBox Target.Address & " がダブルクリックされました!"
' ダブルクリックによる通常の「編集モード」をキャンセルする
Cancel = True
End Sub
コードの解説
Worksheet_BeforeDoubleClick
「このシートのセルがダブルクリックされる直前(Before)」に動くイベントの名前である。
Target As Range (引数)
第7回で学んだ「引数」がここで登場する。
Target には、「今ダブルクリックされたセル」が自動的にセットされて渡される。
Cancel = True (超重要!)
通常、Excelでセルをダブルクリックすると「文字が入力できる状態(編集モード)」になる。
Cancel = True と書くことで、「ダブルクリック本来の編集モードに入る動きをキャンセルする」ことができる。これを入れることで、スマートにマクロの処理だけを実行できる。
実際に動かしてみよう!
- VBAエディタを閉じる。
- 設定したシート上の好きなセル(例:
B2など)をダブルクリックしてみよう。 - 「$A$2 がダブルクリックされました!」 とメッセージが表示されれば成功である!


メッセージを閉じても、セルが編集モード(カーソルがチカチカする状態)にならず、すっきり動くのが確認できる。
このファイルを保存するには、Excel マクロ有効ブック(*.xlsm)として保存しよう。

まとめ
今回はイベントプロシージャの基本として、ダブルクリックで動かす仕組みを解説した。
- イベントプロシージャは「特定の操作」で自動実行される
- コードは「標準モジュール」ではなく「シートモジュール」に書く
Cancel = Trueで通常ダブルクリックの編集モードをオフにできる
次回は
次回は、今回学んだイベントプロシージャとIf文を組み合わせて、「セルをダブルクリックするたびに『〇』がついたり消えたり(トグル表示)する実用マクロ」を作っていく。
チェックリストや出席簿作りにとても役立つテクニックなので、お楽しみに!


コメント