今回はダブルクリックしたセルの値によって処理を分岐させる方法を紹介します。
以前Intersectに関連した記事を投稿していますので、こちらも併せてご覧ください!
ダブルクリックしたセルの値に応じて処理を分岐させる方法
分岐させるには
ダブルクリックしたセルの値に応じて処理を分岐させるには、BeforeDoubleClickイベントの引数のTargetとIf文を組み合わせます。
今回紹介の為、以下のToDoリストを用いて説明します。

C列に進捗(未達 or 完了),D列にやることを記入し、やることが終わったらその行の未達をダブルクリックすると進捗が未達→完了に更新され、取り消し線が自動で引かれます。

また、既に完了になっている行の進捗をダブルクリックすると既に終わっている旨のメッセージが表示されるようになっています。

コードの紹介
以下、サンプルコードです。コードは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 = "完了"
ElseIf Not (Intersect(Target, Range("C:C")) Is Nothing) And _
Target.Value = "完了" Then
MsgBox "やること:" & Target.Offset(0, 1) & " は終わってます。"
End If
End Sub
それぞれポイントになる部分を説明します。
また、シートイベントはWorksheet_BeforeDoubleClickを使用していますが、過去に以下記事で紹介・解説していますので、こちらも併せてご覧ください!
状況列がダブルクリックされたか判定
以下の部分で状況セルがダブルクリックされたかを判定しています。
...
If Not (Intersect(Target, Range("C:C")) Is Nothing)...
...
ElseIf Not (Intersect(Target, Range("C:C")) Is Nothing)...
...
Intersectは引数に指定した範囲内に指定したセルがあるか判定するメソッドになります。
今回の場合引数にTarget(ダブルクリックしたセル)とRange(“C:C”)(C列)を指定し、返り値がNothingになっていないかを判定することで、疑似的にC列がダブルクリックされたかどうかを判定しているわけです。
状況列の値を判定する
以下の部分で状況列の値(未達・完了)を判定しています。
...
And Target.Value = "未達" ...
...
And Target.Value = "完了" ...
...
先ほど紹介したIntersectだけではセルの値が未達か完了かが判定できない為、Andをつけて
「C列がクリックされていて、なおかつセルの値が”未達”である or ”完了”である」
のように判定させています。
まとめ
今回はダブルクリックしたセルの値によって処理を分岐させる方法を紹介しました。
ダブルクリック時の処理を分岐させるには、
- BeforeDoubleClickイベントの引数のTargetとIf文を組み合わせる
- Intersectの範囲を注意する
- ElseIfで指定する条件に誤りがないか確認する
上記3点に気を付けていただければと思います。
コメント