[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『同じ値が続く間背景色を交互に変更する方法』(ABCZ)
初めて投稿します。
よろしくお願いいたします。
下記のようなA列からC列に文字入力があるシートの場合の質問です。
A B C
A TEST1 aaa ・・・A1からC1迄の背景色は 水色
A TEST1 aaa ・・・A2からC2迄の背景色は 水色
B TEST2 bbb ・・・A3からC3迄の背景色は 黄色
C TEST3 ccc ・・・A4からC4迄の背景色は 水色
C TEST3 ccc ・・・A5からC5迄の背景色は 水色
C TEST3 ccc ・・・A6からC6迄の背景色は 水色
D TEST4 ddd ・・・A7からC7迄の背景色は 黄色
D TEST4 ddd ・・・A8からC8迄の背景色は 黄色
E TEST5 eee ・・・A9からC9迄の背景色は 水色
A列にて同じ値が続く場合、対象行の背景色を水色とし
値が変更になった場合は対象行の背景色を黄色とする方法を
VBAで考えているのですがどの様に考えれば良いのでしょうか。
またA列で同じ値が続く場合A列からC列迄のセルの結合を
加味したい場合の考え方も教えていただければと思います。
< 使用 Excel:Excel2010、使用 OS:Windows7 >
随時処理でいいのですか?
Sub test()
Dim r As Range Dim c As Variant Dim v As Long c = 16776960 '65535 Range("A1:C2").Interior.Color = c v = Range("A" & Rows.Count).End(xlUp).Row If v = 1 Then Exit Sub For Each r In Range("A2:A" & v) If r.Value = r.Offset(-1).Value Then r.Resize(, 3).Interior.Color = c Else c = IIf(c = 16776960, 65535, 16776960) r.Resize(, 3).Interior.Color = c End If Next End Sub
セルの結合については質問の意味が分かりません。
(ウッシ) 2016/08/17(水) 10:18
ご回答ありがとうございました。
求めたい結果が得られました。
一つ一つ関数を読み解きながら勉強しています。
セルの結合につきましては
A1からC2など同じ文字列が続きますので
そのような場合はセルの結合を用いて1行にしたいと
思っていました。
(ABCZ) 2016/08/17(水) 10:51
A TEST1 aaa
等の3セルの値は結合した1セルにまとめるという事ですか?
どのようにまとめるのですか?
スペースで?
カンマで?
それとも、A1:A2、B1:B2、C1:C2 をそれぞれ結合するという事ですか?
(ウッシ) 2016/08/17(水) 10:54
連結すべきでないものを連結し、そのせいで不具合が生じたといって、解決方法を質問しないように願います。おそらく、連結を止めなさい、という回答と、連結を判定するために複雑になったマクロ案が出るだけです。
(???) 2016/08/17(水) 11:07
加工した姿を、単に見るだけの資料とするならいいのですが、さらに、これを、次に参照する元ネタにしょうとするなら ??? さん指摘の通り、扱いにくいものになります。
なので、やるとしても、別シートに、その結合を加えたイメージを展開したほうがいいとは思いますが、さておき。
A列だけで判定するのか、結合に関しては B,C列も含めて判定するのか、そのあたりが不明ですが 以下は Aれつだけで判定しています。
Sub Sample() Dim flg As Boolean Dim c As Range Dim f As Range
Set f = Range("A1")
For Each c In Range("A2", Range("A" & Rows.Count).End(xlUp).Offset(1)) If c.Value <> c.Offset(-1).Value Then With Range(f, c.Offset(-1)).Resize(, 3) .Interior.Color = IIf(flg, vbYellow, vbCyan) Application.DisplayAlerts = False .Columns(1).Merge .Columns(2).Merge .Columns(3).Merge Application.DisplayAlerts = False End With Set f = c flg = Not flg End If Next
End Sub
(β) 2016/08/17(水) 11:29
分かりにくい表現をしてしまい申し訳ありませんでした。
結論としましては
A1:A2、B1:B2、C1:C2 のような結合を想定しています。
(ABCZ) 2016/08/17(水) 12:28
ご忠告及びご回答ありがとうございます。
確かに元データにて結合を行うと後々不具合が出そうなので
実行する場合は別シートにて行います。
結合に関しましてはA列・B列・C列を含めた結合を考えています。
(ABCZ) 2016/08/17(水) 12:29
Sheet1からSheet2に転記して実行するようにすると、
Sub test1()
Dim m As Range Dim r As Range Dim c As Variant Dim v As Long Dim sh1 As Worksheet Dim sh2 As Worksheet
Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2")
sh2.UsedRange.Clear sh1.Range("A1").CurrentRegion.Copy sh2.Range("A1")
With sh2 c = 16776960 '65535 .Range("A1:C1").Interior.Color = c
Set m = .Range("A1")
v = .Range("A" & Rows.Count).End(xlUp).Row If v = 1 Then Exit Sub Application.DisplayAlerts = False For Each r In .Range("A2:A" & v) If r.Value = r.Offset(-1).Value Then r.Resize(, 3).Interior.Color = c Else c = IIf(c = 16776960, 65535, 16776960) r.Resize(, 3).Interior.Color = c .Range(m, r.Offset(-1)).Merge .Range(m.Offset(, 1), r.Offset(-1, 1)).Merge .Range(m.Offset(, 2), r.Offset(-1, 2)).Merge Set m = r End If Next Application.DisplayAlerts = True End With End Sub
こんな感じでしょうか?
(ウッシ) 2016/08/17(水) 15:03
ご回答ありがとうございます。
元データを崩さずにセルの結合が可能となっていますので
まさに欲しかった結果そのものです。
一つ一つ関数を読み解いていきます。
本当にありがとうございました。
(ABCZ) 2016/08/17(水) 18:22
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.