導入
前回では、ユーザーの操作に応じて自動でマクロを実行する「イベントプロシージャ」の基本と、セルをダブルクリックしたときに処理を発生させる方法についてご紹介した。
今回はその実践編として、「セルをダブルクリックするたびに『〇』がついたり消えたりするマクロ」を作成する。
クリック1つで状態を切り替えるこのような処理を「トグル(Toggle)処理」と呼ぶ。チェックリストや出席簿、タスク管理表などを作成する際に非常に役立つテクニックであるため、ぜひマスターしてほしい。
「トグル処理」の仕組みと考え方
トグルとは、1つの操作で2つの状態(ON/OFF、表示/非表示など)を交互に切り替える仕組みのことだ。
これをVBAで実現するには、「If文(条件分岐)」を活用する。
ロジックは非常にシンプルである。
- もし選択されたセルが「〇」なら $\rightarrow$ 空白にする(消す)
- そうでなければ(空白などなら) $\rightarrow$ 「〇」を入力する
この条件分岐を、ダブルクリック時に実行される Worksheet_BeforeDoubleClick イベントの中に組み込めばよい。
サンプルコードと設定手順
さっそくコードを作成してみよう。
設定手順
Alt+F11でVBAエディタを開く。- 機能を動かしたいシートのシートモジュール(画面左側の
Sheet1など)をダブルクリックして開く。 - 以下のコードを貼り付ける。
VBA
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
' 通常のダブルクリック(編集モード)をキャンセルする
Cancel = True
' セルの値によって「〇」の付け外しを切替(トグル処理)
If Target.Value = "〇" Then
Target.Value = ""
Else
Target.Value = "〇"
End If
End Subコードの解説
ポイントとなるのは以下の2点である。
Cancel = True の役割
第8回でも触れたが、この記述によって「ダブルクリックでセルが編集状態(カーソルがチカチカする状態)になるデフォルト動作」をキャンセルしている。これがないと、〇が入力された直後にセル編集モードに入ってしまい、操作性が著しく低下する。
If文による値の判定と切り替え
Target.Value(ダブルクリックされたセルの値)を確認し、すでに「〇」が入っている場合は ""(空文字)を代入して消去する。それ以外の場合は "〇" を代入する。
この単純な条件分岐により、同じセルを何度ダブルクリックしても「〇」と「空白」が交互に切り替わるトグル動作が実現する。
実際に動かしてみよう
コードを貼り付けたらVBAエディタを閉じ、シート上の適当なセルをダブルクリックしてみよう。
- 空白のセルをダブルクリック $\rightarrow$ 「〇」が表示される
- 「〇」が表示されているセルを再度ダブルクリック $\rightarrow$ 「〇」が消える

キーボードで「まる」と入力して変換する手間がなくなり、マウスクリックだけで快適にチェック入力ができることを実感できる。
まとめと注意点
今回は、イベントプロシージャとIf文を組み合わせて「〇」のトグル表示を実現した。
- トグル処理は「If文」で現在の値を判定して切り替える
- ダブルクリック編集を止める
Cancel = Trueが必須
今回のコードでは「シート上のどのセルをダブルクリックしても〇がつく」状態になっている。実務では「A列のチェック欄だけで動かしたい」といったケースがほとんどだろう。
そこで次回では、Intersect 関数を使ってマクロが動く範囲を特定エリア(A列など)だけに制限する応用テクニックをご紹介しよう。



コメント