セルの内容が異なる場合に交互に塗りつぶしたい
|
|
マクロ / VBA ColorIndex, ストライプ, 塗りつぶし |
言葉ではなかなか説明しにくいのでサンプルを見てもらえれば一目瞭然かと思いますが、
A列にあるNo.が違えば交互に塗りつぶしていきたい。
テーブルにあるストライプ柄スタイルの様なのですが、これは1行毎ではなく、No.毎に塗り分けたいという事です。
条件付き書式で出来るかな、と思ったのですが、条件付き書式には「上のセルが白ならばこのセルをグレーにする」というように、色を判別する条件が作れません。「上のセルとこのセルの値が違うならば…」なら出来ますが。
マクロで塗りつぶす
仕方がないのでマクロで塗りつぶします。
まぁ条件付き書式で塗るより実際に塗りつぶしたほうがあとあとの管理も簡単だし、特別なセルだけ他の色にしたい、という事にも対応出来るのでこちらのが良いでしょう。
Sub macro1()
y = 2
x = 3
Do Until Cells(y, 1) = ""
If Cells(y, 1) = Cells(y - 1, 1) Then
Range(Cells(y, 1), Cells(y, x)).Interior.ColorIndex = Cells(y - 1, 1).Interior.ColorIndex
Else
If Cells(y - 1, 1).Interior.ColorIndex <> 48 Then
Range(Cells(y, 1), Cells(y, x)).Interior.ColorIndex = 48
End If
End If
y = y + 1
Loop
End Sub
x=横軸、塗りつぶす列数を指定しているので3=C列まで塗りつぶします。
y=縦軸、2行目から塗りつぶします。(1行目は項目名として使用しているので)
ColorIndexで48としているのでグレーに塗りつぶします。他の色が良いのであればこの48を変えてください。
コードの説明
説明するまでもないコードですが、
① 上のセルとA列のNo.が同じであれば、上の行の色と一緒にする。
② 上のセルとA列のNo.が違えば、
②-1 上のセルの色がグレーでなかったら、当該行をグレーに塗る。
②-2 上のセルの色がグレーだったら、何もしない(白のまま)。
こんな感じのフローです。
ColorIndexの色
ちなみにColorIndexの番号と実際の色です。
Comment
ありがとうございました。
助かりました。