6/01/2025

Excel。VBA。範囲内の塗りつぶされているセルを数えいたい【COLOR】

Excel。VBA。範囲内の塗りつぶされているセルを数えいたい

<Excel VBA>

Excelには、様々な関数が用意されていますが、苦手というか、出来ないものがあります。


その中の一つに、セルが塗りつぶしされている件数を求めるというのがあります。


次の表を用意しました。

範囲内の塗りつぶされているセルを数えいたい

B2:D5の範囲には、セルの塗りつぶしされているセルを数えたいわけです。


よく、数値を入力したり、文字を入力したりして、入力した文字が非表示になるようにして、その文字を数えるという方法もありますが、今回は、全くの空白セルで、塗りつぶしだけされています。


Excelの関数にセルの塗りつぶしを数える関数は、現時点では、ありません。


この程度の量でしたら、視認することもできますが、量が増えたらお手上げです。


これは、Excel VBAで対応することにしました。

では、次のようなプログラム文をつくってみました。


Sub 色数える()

    Dim iro As Long

    Dim hani As Range


    iro = 0


    For Each hani In Range("b2:d5")

        If hani.Interior.Color <> 16777215 Then

            iro = iro + 1

        End If

    Next

    Range("b7") = iro

End Sub


まずは実行してみます。


B7に4と求めることができました。


では、プログラム文を確認してみましょう。

For Each hani In Range("b2:d5")

    If hani.Interior.Color <> 16777215 Then

        iro = iro + 1

    End If

Next


変数宣言ブロックはさておき、メインのところをみてみます。

For Each ~ Next文は、繰り返し処理をしています。


If hani.Interior.Color <> 16777215 Then

    iro = iro + 1

End If


もし、範囲選択した箇所のセルの色(hani.Interior.Color)が、16777215 でなかったら(<>)

iroに+1します。

という意味です。


16777215の意味ですが、色は、RGBで設定されています。


最大値は白でFF FF FFという16進数で設定されています。


このFF FF FF を10進数に変換すると、16777215です。


つまり16777215は、白なので、白以外ならiroという変数を+1させています。


あとは、


Range("b7") = iro

と設定して、B7に結果を表示するようにしています。


これで、塗りつぶされているセルの件数を求めることができました。


ただし、このプログラム文は、セルが塗りつぶされているか、そうでないかの判断しかできません。


たとえば、赤色は何件で、緑色は何件というプログラム文ではありませんので、ご注意ください。