[[20230516165419]] 『ダブルクリックで該当セルに〇付け、行に色付けを』(VBA勉強中) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ダブルクリックで該当セルに〇付け、行に色付けをしたい』(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 <> ""がTrueの時に色を変えてないからじゃないですかね。
( ’ふ’) 2023/05/16(火) 17:06:05

 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


皆様
上手くいきました!
沢山のコメントをいただきまして有難うございます。
大変参考になりました。
(VBA勉強中) 2023/05/16(火) 22:01:04

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.