指定した色と同じ背景色のセルを数えるには

指定セル範囲にある指定した色と同じ背景色のセルの数を数えるには、大きく2つの処理が必要になります。

1つは「指定セル範囲」を決めることです。一般的には選択範囲とすることが多いとは思います。

もう1つは「指定した色と同じ背景色のセル」の判定とそれを数えることです。

以下にコードとその説明をします。

指定セル範囲と同じ背景色の数を数えるコード

以下の関数は引数にセル範囲と色の2つを渡します。セル範囲の中で同じ色のセルの数を数えてそれを返します。

1つ目の引数のセル範囲はRangeオブジェクトを利用しています。そのため呼び出し側でSelectionなどをそのまま渡すことが可能です。

2つ目の引数はInterior.Colorプロパティを指定します。ColorプロパティはLong型の値になっており、RGB関数でも同じ値になるため、RGB関数をそのまま渡すことが可能です。

 

コード説明

指定セル範囲を引数で渡せるようにしています。

Rangeオブジェクトを利用していますが、これには2つ理由があります。1つはSelectionオブジェクトをそのまま利用することができることです。Selectionをそのまま渡すことが出来ればコーディングがラクになります。もう1つの理由はFor Each構文でRangeオブジェクトとしてループ処理が可能になります。そのためRangeオブジェクトのプロパティをそのまま利用することが可能になり、後続の背景色の判定処理がラクになります。

指定色と同じ背景色かどうかの処理ですが、RangeオブジェクトのInterior.Colorプロパティを利用しています。

ColorIndexプロパティを使いたい場合は10行目のColorをColorIndexに変更するだけです。あとは呼び出し元で第二引数に渡す色をColorIndexに変更します。

そして、同じ色かどうかの判定で一致した場合に同一背景色の数を加算します。

テスト用コード

以下は上の関数のテスト用コードです。

上の関数を3回呼び出しています。

それぞれ、選択セル範囲でのA1セルと同じ背景色の数、選択セル範囲での赤いセルの数、指定セル範囲の赤いセルの数、を取得します。

 

実行結果

以下のような背景色が設定されたシートでテストコードを実行します。

テストコードを実行すると以下のようになります。
4
3
1

9行目の結果の4は、A1からD6までの選択セル範囲の中でA1セルの水色のセルが4つあることを意味します。

13行目の結果の3は、A1からD6までの選択セル範囲の中で赤色のセルが3つあることを意味します。

17行目の結果の1は、A1からC3までの選択セル範囲(絵の赤枠部分)の中で赤色のセルが1つあることを意味します。