今回はセルをダブルクリックしたときに実行させるマクロを紹介したいと思います。
ToDoリスト等作成するときに役立つと思いますので、良ければ是非参考にしていただければと思います。
VBAを使えるようにする方法や、ダブルクリック時にコードを実行させる方法については以前紹介していますので、併せてご覧ください!
作成イメージ
こちらが作成イメージです。カレーの作る手順をToDoリスト化したものです。
C列の「未達」になっているセルをダブルクリックすると、セルが「未達」→「完了」に変化し、取り消し線が引かれます。なお、取り消し線は条件付き書式を使っています。
コード紹介
それでは、コードの紹介です。
なお、コードは実行するシート先に貼り付けてください。今回はSheet1(ToDo)に貼り付けます。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
If Not (Intersect(Target, Range("C:C")) Is Nothing) And _
Target.Value = "未達" Then
Target.Value = "完了"
End If
End Sub
コードは至ってシンプルで、
- C列がダブルクリックされた時
- ダブルクリックしたセルが「未達」の時
に処理が実行されます。
コードのポイント
今回のコードのポイントについて説明します。
ポイントになるのはIf~Thenの部分です。2つの条件を指定しており、
Not (Intersect(Target, Range("C:C")) Is Nothing)
の部分が、C列がダブルクリックされた時にあたり、
Target.Value = "未達"
の部分が、ダブルクリックしたセルが「未達」の時にあたります。
そもそも「Intersectって何ぞや」ってところになってきますが、ざっくり言うと
「引数に指定したセル範囲内で重なるセルを返しますよ」っていう感じです。
Intersectの説明
Intersect(【セル範囲1】,【セル範囲2】,…)
1.セル範囲1・セル範囲2
必須項目になります。任意のセル範囲を指定します。
今回で言うと、
- セル範囲1:「Target」(可変,ダブルクリックしたセル)
- セル範囲2:「Range(“C:C”)」(固定,状態を表示するセル範囲)
を指定しています。
試しに、「野菜の皮をむく」のタスクをダブルクリックします。
ウォッチ式を追加し、「Intersect(Target, Range(“C:C”)).Address」でダブルクリックしたセルを確認すると、値が「$C$4」と表示され、タスクが「完了」になりました。
ウォッチ式を確認することで、どこのセルをクリックしたかが分かるわけですね。
ちなみにウォッチ式を追加するには、コードエディタ上で右クリック→「ウォッチ式を追加」からです!
まとめ
今回はIntersectを使って指定範囲内のセルを取得する方法を紹介しました。
ToDoリストの進捗管理等で使えると思いますので、是非参考にしていただければと思います!
【2022/10/26 更新】Intersectを活用した台帳マクロを紹介
Intersectを活用した台帳マクロを紹介していますので、こちらも併せてご覧ください!
コメント