[[20150717165702]] 『特定の3色で塗りつぶしされてるか見たい』(釘) ページの最後に飛ぶ

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

 

『特定の3色で塗りつぶしされてるか見たい』(釘)

B列にA、Bのどちらかの文字列が入っています。

Aの場合はE列〜H列のどこかに塗りつぶしセルがいる。
Bの場合は塗りつぶしなし(何もなくて良い)。

指定色は水色(33)です。しかしこの水色のほかに、黄色(27)と紫(26)で塗りつぶしされている場合があります。この2色は別の理由で塗りつぶしされているので判定せず、 B列に A と入っていればE〜H列のどこかのセルが水色に塗りつぶしされているか調べたいです。
正常なら特になにもせず塗りつぶしされてなかった場合は A と書かれているB列のセルを赤く塗りつぶししたいです。水色の塗りつぶしがあるのにB列に A と書かれていない場合もB列のセルを塗りつぶしししたいです。こんなことは可能なんでしょうか、、?ご教示下さい。

()内はColorIndexの番号です。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 準備がちょっと大変で、かつB列の色がついたり消えたりするタイミングが、セルのどこかの値がかわった時なので、ちょっと遅れますが。

 1.名前の登録。1行目どこでもいいので、セルを選択した上で名前登録。

 名前 CELLCOLORE
 参照範囲 =GET.CELL(63,!$E1)+NOW( )*0

 名前 CELLCOLORF
 参照範囲 =GET.CELL(63,!$F1)+NOW( )*0

 名前 CELLCOLORG
 参照範囲 =GET.CELL(63,!$G1)+NOW( )*0

 名前 CELLCOLORH
 参照範囲 =GET.CELL(63,!$H1)+NOW( )*0

 2.B列を選択して条件付書式

 数式が =AND(B1="A",AND(CELLCOLORE<>33,CELLCOLORF<>33,CELLCOLORG<>33,CELLCOLORH<>33)) 背景色 赤
 数式が =AND(B1<>"A",OR(CELLCOLORE=33,CELLCOLORF=33,CELLCOLORG=33,CELLCOLORH=33)) 背景色 赤

(β) 2015/07/17(金) 17:41


 マクロでやるなら、

 Sub Sample()
    Dim c As Range
    Dim r As Range
    Dim blue As Boolean

    With Range("A1", ActiveSheet.UsedRange).Columns("B")
        For Each c In .Cells
            blue = False
            For Each r In c.EntireRow.Range("E1:H1")
                If r.Interior.ColorIndex = 33 Then blue = True
            Next
            c.Interior.ColorIndex = xlNone
            If c.Value = "A" Then
                If Not blue Then c.Interior.Color = vbRed
            Else
                If blue Then c.Interior.Color = vbRed
            End If
        Next
    End With

 End Sub

(β) 2015/07/17(金) 17:55


βさん

返信遅くなってすみません。マクロの方で質問したいんですがもし水・黄・紫の3色以外が入っていた場合をチェックする方法を教えて頂けませんか?
(釘) 2015/07/21(火) 11:16


 AあるいはBだったときの、それぞれの色塗り条件を明確にしていただけますか?

    水色  黄または紫  それ以外の色

 1. あり  あり      あり
 2. あり  あり      なし
 3. あり  なし      あり
 4. あり  なし      なし
 5. なし  あり      あり
 6. なし  あり      なし
 7. なし  なし      なし
 8. なし  なし      あり

(β) 2015/07/21(火) 12:53


それ以外の色はすべてなしです。
黄・紫は、AあるいはBと書かれているかどうかに関係なく、その表の作成者以外の人間が確認で付ける色です。(明確に条件を設定することができません)
なので、B列にAと入っていれば水色に塗りつぶしされたセルがあるか、水・黄・紫以外で間違った色が塗りつぶしされていないか、ということを調べたいです。

(釘) 2015/07/21(火) 13:11


 条件は言葉で説明すると、おうおうにして勘違いが発生します。
 要件誤解による無駄なコードを書くのを避けたいので、面倒がらず、 それを(16通り)回答願います。

 Aだったとき、1.〜8.はそれぞれ色を塗るのか塗らないのか。
 Bだったとき、1.〜8.はそれぞれ色を塗るのか塗らないのか。

 ちなみに、アップしたケースで、例をあげると

 4.は、E〜H列のセルで、水色があった、黄または紫はなかった、それ以外の色もなかった ということを意味しています。

(β) 2015/07/21(火) 13:34


 あるいは、以下の条件でいいですか?

 A の場合 : 塗りつぶしの色は 水色、黄、紫 の3色のみ。それら以外の色はなし。これがOK。(水色がなく、黄、紫だけだったとしても、OK)
         そうではない場合はNGで赤。

 B の場合 : 水色の塗りつぶしがなければOK,あればNGで赤。

(β) 2015/07/21(火) 13:45


 あぁ、それと・・・・

 ちょっと、心配になりました。

 >>黄・紫は、・・・・・・人間が確認で付ける色です。(明確に条件を設定することができません) 

 ということは、水色は条件付書式でつけられている? それとも、水色も「人間」がつけている?

(β) 2015/07/21(火) 13:49


あっすみません
全て人の手で付けています。条件付書式はどこにも使われていません。
ただ、確認する人が複数いるので人によってどこを確認しているか(どこに黄・紫を付けるのか)というのが私には分かりません、、
(釘) 2015/07/21(火) 14:01

> A の場合 : 塗りつぶしの色は 水色、黄、紫 の3色のみ。それら以外の色はなし。これがOK。(水色がなく、黄、紫だけだったとしても、OK)
         そうではない場合はNGで赤。
 B の場合 : 水色の塗りつぶしがなければOK,あればNGで赤。

ありがとうございます。その条件でお願いします。
(釘) 2015/07/21(火) 14:13


 Sub Sample2()
    Dim c As Range
    Dim r As Range
    Dim blue As Boolean
    Dim YP As Boolean
    Dim other As Boolean

    With Range("A1", ActiveSheet.UsedRange).Columns("B")
        For Each c In .Cells
            blue = False
            YP = False
            other = False
            For Each r In c.EntireRow.Range("E1:H1")
                Select Case r.Interior.ColorIndex
                    Case xlNone
                    Case 33
                        blue = True
                    Case 26, 27
                        YP = True
                    Case Else
                        other = True
                End Select
            Next

            c.Interior.ColorIndex = xlNone

            If c.Value = "A" Then
                If Not blue And Not YP Or other Then c.Interior.Color = vbRed
            Else
                If blue Then c.Interior.Color = vbRed
            End If

        Next
    End With

 End Sub

(β) 2015/07/21(火) 14:41


βさんありがとうございました!是非使わせて頂きます
(釘) 2015/07/21(火) 16:50

度々すみません。新しく建てずにこちらを使わせて頂きますね

1行目にそれぞれ名称や提出日などの列のタイトルが入っているんですが、その列のタイトルだけ色分けすることになったそうで、色分けした表に前回作成して頂いたコードを使用すると!行目のセルが赤く反応してしまいます。
2行目から調べたいのですが、

 With Range("A1",〜 の部分を"A2"に変えたり、Range("E1:H1")をRange("E2:H2")に変えたりしてみてもチェックされてしまいます。このコード自体を理解していれば容易いことなのかもしれませんが・・・よろしければお助けくださいませ。
(釘) 2015/07/22(水) 13:47

 B列を何行目までチェックするかということが見えなかったので、わかりにくい領域指定にしていましたが
 どうやら以下でよさそうですね。B2からチェックします。

 Sub Sample3()
    Dim c As Range
    Dim r As Range
    Dim blue As Boolean
    Dim YP As Boolean
    Dim other As Boolean

    For Each c In Range("B2", Range("B" & Rows.Count).End(xlUp))
        blue = False
        YP = False
        other = False
        For Each r In c.EntireRow.Range("E1:H1")
            Select Case r.Interior.ColorIndex
                Case xlNone
                Case 33
                    blue = True
                Case 26, 27
                    YP = True
                Case Else
                    other = True
            End Select
        Next

        c.Interior.ColorIndex = xlNone

        If c.Value = "A" Then
            If Not blue And Not YP Or other Then c.Interior.Color = vbRed
        Else
            If blue Then c.Interior.Color = vbRed
        End If
    Next

 End Sub

(β) 2015/07/22(水) 14:17


βさん、お手数をお掛けしてしまって申し訳ありませんでした。1行目がチェックされなくなってホッとしました。本当にありがとうございました。
また掲示板を利用する機会があれば是非宜しくお願いします。それでは失礼します。
(釘) 2015/07/22(水) 14:34

コメント返信:

[ 一覧(最新更新順) ]


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