行全体が塗りつぶされているExcelシートを指定した範囲だけの塗りつぶしに変える
納入実績表で、営業さんがある案件に背景色をつけたんですけど、
こんなふうに、

行全体を塗りつぶしてしまったので、
並べ替えなどするとこんなふうに、

値の入っていないセルが残ってしまう。
これが気持ち悪いので、値の入ってる列までの塗りつぶしに変更するコードを書きました。
他のシートでも使えるように、何列分の塗りつぶしにするかは最初にユーザーが入力します。
Option Explicit
Sub 背景色範囲変更()
'-----仕様-----
'行全体の背景色を設定しているところを、指定した範囲だけの設定に変える
Const kondo_color = 16776960 '近藤さんが好きな色
Dim column_colored_area As Integer
column_colored_area = InputBox("何列分の色を変えますか?例:A列までは「1」、J列までは「10」", "入力してください")
Dim i As Integer
For i = 2 To Range("A65536").End(xlUp).Row
With Cells(i, 1)
If .Interior.Color = vbYellow Then 'セルの色が黄色だったら
Rows(i).Interior.Color = xlNone '行全体の塗りつぶしをやめる
Range(Cells(i, 1), Cells(i, column_colored_area)).Interior.Color = vbYellow '入力した列数分だけ黄色くする
ElseIf .Interior.Color = kondo_color Then
Rows(i).Interior.Color = xlNone
Range(Cells(i, 1), Cells(i, column_colored_area)).Interior.Color = kondo_color
Else
End If
End With
Next i
End Sub
…なんか同じ記述が繰り返されるので、もうちょっと整理できそうな気がするんですけど。
あと、最初のインプットボックスで「キャンセル」をした場合の処理を書かないといけないのと、
使われている色が違う時の処理はどうするのか…という問題もあり。
あとやっぱり変数名(定数名)って決めるのむずかしい。
