行全体が塗りつぶされている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
…なんか同じ記述が繰り返されるので、もうちょっと整理できそうな気がするんですけど。
あと、最初のインプットボックスで「キャンセル」をした場合の処理を書かないといけないのと、
使われている色が違う時の処理はどうするのか…という問題もあり。
あとやっぱり変数名(定数名)って決めるのむずかしい。