[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『特定の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
(釘) 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
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
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
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.