5/30/2022

Excel。VBA。条件と合致した行全体を手早く塗りつぶしたい。【Interior】

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でプログラムをつくってしまうというのも、作業効率の面から見ても、いいかもしれませんね。