Excel。VBA。条件と合致した行全体を手早く塗りつぶしたい。
<Excel VBA:Interior>
データを読み込んだ後に、毎回同じ設定をするのは、意外と面倒です。
やりたい作業は、販売数が80以上のデータがある行全体を塗りつぶしたいわけです。
条件付き書式をつかって、数式で「=$D2>=80」として塗りつぶしを設定すればいいだけなのですが、データを読み込むたびに設定するのは、大変です。
そこで、Excel VBAでプログラムをつくって対応することにしましょう。
次のようにプログラムを書いてみました。
Sub 行塗りつぶし()
Dim i As Long
Dim lastrow As Long
lastrow = Cells(Rows.Count, "a").End(xlUp).Row
For i = 2 To lastrow
If Cells(i, "d") >= 80 Then
With Range(Cells(i, "a"), Cells(i, "f")).Interior
.ThemeColor = xlThemeColorAccent1
.TintAndShade = 0.8
End With
End If
Next
End Sub
とりあえず、実行して確認してみましょう。
このように、販売数が、80以上のデータがある行全体を塗りつぶすことができました。
では、プログラム文を確認しておきましょう。
お馴染みの変数宣言ですね。
Dim i As Long
Dim lastrow As Long
lastrow = Cells(Rows.Count, "a").End(xlUp).Row
変数名のlastrowは、データ件数を入れるための変数です。
データ件数繰り返したいので、用意しました。
For i = 2 To lastrow
If Cells(i, "d") >= 80 Then
With Range(Cells(i, "a"), Cells(i, "f")).Interior
.ThemeColor = xlThemeColorAccent1
.TintAndShade = 0.8
End With
End If
Next
For To Nextはデータ件数分繰り返し処理をしています。
If~End Ifは、販売数が80以上だったらという条件で、処理を振り分けています。
With~End Withは、80以上のデータだった場合、行全体を塗りつぶす処理をしています。
「Range(Cells(i, "a"), Cells(i, "f")).Interior」を繰り返し入力するのは、これまた面倒なので、With文をつかって、繰り返し入力する作業を減らしています。
Interiorプロパティをつかうことで、塗りつぶしすることができます。
「ThemeColor = xlThemeColorAccent1」と「TintAndShade = 0.8」ですが、これはテーマの色を設定しています。
この2つは何を意味しているのかというと、カラーパレットを見れば、一目瞭然です。
テーマカラーは、Accent1で、「0.8」すなわち、80%なので、「青、アクセント1 白+基本色80%」で、セルを塗りつぶすように指示しているわけです。
条件付き書式を設定するのもいいですが、何度も同じことをするようでしたら、Excel VBAでプログラムをつくってしまうというのも、作業効率の面から見ても、いいかもしれませんね。