【Excel VBA】セルをダブルクリックしたときに実行させるマクロを紹介【Intersect】

Excel
スポンサーリンク

今回はセルをダブルクリックしたときに実行させるマクロを紹介したいと思います。

ToDoリスト等作成するときに役立つと思いますので、良ければ是非参考にしていただければと思います。

VBAを使えるようにする方法や、ダブルクリック時にコードを実行させる方法については以前紹介していますので、併せてご覧ください!

スポンサーリンク

作成イメージ

こちらが作成イメージです。カレーの作る手順をToDoリスト化したものです。

C列の「未達」になっているセルをダブルクリックすると、セルが「未達」→「完了」に変化し、取り消し線が引かれます。なお、取り消し線は条件付き書式を使っています。

Intersect完成イメージその1
Intersect完成イメージその2
スポンサーリンク

コード紹介

それでは、コードの紹介です。

なお、コードは実行するシート先に貼り付けてください。今回はSheet1(ToDo)に貼り付けます。

コードの紹介その1
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の説明その1

ウォッチ式を追加し、「Intersect(Target, Range(“C:C”)).Address」でダブルクリックしたセルを確認すると、値が「$C$4」と表示され、タスクが「完了」になりました。

Intersectの説明その2
Intersectの説明その3

ウォッチ式を確認することで、どこのセルをクリックしたかが分かるわけですね。

ちなみにウォッチ式を追加するには、コードエディタ上で右クリック→「ウォッチ式を追加」からです!

まとめ

今回はIntersectを使って指定範囲内のセルを取得する方法を紹介しました。

ToDoリストの進捗管理等で使えると思いますので、是非参考にしていただければと思います!

【2022/10/26 更新】Intersectを活用した台帳マクロを紹介

Intersectを活用した台帳マクロを紹介していますので、こちらも併せてご覧ください!

コメント

タイトルとURLをコピーしました