6/28/2025

Excel。VBA。特定の色で塗りつぶされたセルのみを数えたい

Excel。VBA。特定の色で塗りつぶされたセルのみを数えたい

<VBA:色を数える>

Excelは、単純に塗りつぶしたセル数を求められる関数は用意されていませんので、一発で求めることはできません。


どうしても数えたい場合には、オートフィルターをつかって抽出した件数を求めることはできますが、少し面倒です。


そこで、Excel VBAをつかって、指定した色で塗りつぶされているセルだけを求めるプログラム文をつくることにしました。


今回用意した表です。

特定の色で塗りつぶされたセルのみを数えたい

B2:D5で、A7と同じ色で塗りつぶされているセルの数を知りたいわけです。


B5とC4は数えたくないわけです。


そのため、単純に、セルが塗りつぶされているかどうかで、判断するわけにはいきません。


指定されている色を把握する必要があります。


では、Excel VBAのプログラム文を確認してみます。


Sub 指定した色を数える()

    Dim kinmuhani As Range

    Dim yasumi As Range

    Dim Cell As Range 

    Dim i As Integer 

    

    Set kinmuhani = Range("B2:D5")

    Set yasumi = Range("A7")

    

    i = 0 

    For Each Cell In kinmuhani

        If Cell.Interior.Color = yasumi.Interior.Color Then

            i = i + 1

        End If

    Next Cell

    

    Range("B7").Value = i

End Sub


まずは、実行してみましょう。


A7と同じ色で塗りつぶされているセルは2つありますので、正しく求めることができています。


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


まずは、変数宣言です。

Dim kinmuhani As Range  範囲選択を代入させます

Dim yasumi As Range  A7の塗りつぶしの色情報を代入します。

Dim Cell As Range  セルをチェックする変数です。

Dim i As Integer   一致するセルの数を格納する変数です。


用意した変数に、指定した範囲選択を代入します。

Set kinmuhani = Range("B2:D5")

Set yasumi = Range("A7")


For Each文で範囲選択内を繰り返して、チェックします。

For Each Cell In kinmuhani

    If Cell.Interior.Color = yasumi.Interior.Color Then

        i = i + 1

    End If

Next Cell

範囲選択内のセルの塗りつぶした色と、A7の塗りつぶした色が同じならば、変数iに1を加算します。


このようなプログラムを用意しておくと、単純な塗りつぶしされているセルを数えるには重宝するかと思います。