[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ダブルクリックで該当セルに〇付け、行に色付けをしたい』(VBA勉強中)
L行をダブルクリックした時に該当セルに〇付け、該当行に色付けをしたく
以下のコードを試しました。
そこまではできたのですが、再度ダブルクリックをした際に〇は消えるのですが色付けが消えません。
どこが間違っておりますでしょうか。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not (Target.Row >= 2 And Target.Row <= 896 And Target.Column >= 12 And Target.Column <= 13) Then End If Target.Value <> "" Then ' Target.Value = "" Cancel = True Else Target.Value = "○" And Rows(Target.Row).Interior.ColorIndex = 4 Cancel = True
End If End Sub
< 使用 Excel:Microsoft365、使用 OS:Windows11 >
Target.Value = "○" And Rows(Target.Row).Interior.ColorIndex = 4
がおかしくないでしょうか。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not (Target.Row >= 2 And Target.Row <= 896 And Target.Column >= 12 And Target.Column <= 13) Then End If Target.Value <> "" Then ' Target.Value = "" Rows(Target.Row).Interior.ColorIndex = 0 Cancel = True Else Target.Value = "○" Rows(Target.Row).Interior.ColorIndex = 4 Cancel = True End If End Sub
(QS) 2023/05/16(火) 17:07:29
特に今回のようなIf分によ条件分岐のときは インデントをしっかりつけないと条件分岐のおか しい箇所を見つけにくくなります。
インデントの付け方はQSさんのレスが参考に なります。 (MK) 2023/05/16(火) 17:29:10
■1
「BeforeDoubleClick」は「Target」が複数になることがありませんから↓でも問題はありませんが
If Not (Target.Row >= 2 And Target.Row <= 896 And Target.Column >= 12 And Target.Column <= 13) Then End If Intersect(target, Range("L2:M896")) Is Nothing Then End
Intersectメソッドを使えば↑のように表現が可能です。
■2
Cancel = True
↑が2か所ありますが、処理内容からすれば1か所のみで表現可能です。
■3
>該当行に色付けをしたく
最初に提示されたコードでは↑が達成できてませんがよいのでしょうか?
>再度ダブルクリックをした際に〇は消えるのですが色付けが消えません。
考え方次第ですが、セルの値も書式もまとめてClearしてしまうというのも手です。
■4
細かい話ですが「ColorIndex」の色はユーザーが変えることができます。
【参考】 http://officetanaka.net/excel/vba/graph/24.htm
上記のようなこともあり個人的には、セルの塗りつぶし色を判定条件にいれることはお勧めしません。
今回の処理で考えれば、セルの値が "○"かどうかだけで処理分岐するのでは事足りないのでしょうか?
■5
という話を踏まえると、たとえば以下のような感じでも目的が達成できる気がします。
興味があればステップ実行して研究してみてください。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Intersect(Target, Range("L2:M896")) Is Nothing Then Stop 'ブレークポイントの代わり Cancel = True If Target.Value = "" Then Target.Value = "○" Target.Interior.Color = vbYellow Else Target.Clear End If End If End Sub
(もこな2) 2023/05/16(火) 21:32:59
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.