指定した色と同じ背景色のセルを数えるには
指定セル範囲にある指定した色と同じ背景色のセルの数を数えるには、大きく2つの処理が必要になります。
1つは「指定セル範囲」を決めることです。一般的には選択範囲とすることが多いとは思います。
もう1つは「指定した色と同じ背景色のセル」の判定とそれを数えることです。
以下にコードとその説明をします。
指定セル範囲と同じ背景色の数を数えるコード
以下の関数は引数にセル範囲と色の2つを渡します。セル範囲の中で同じ色のセルの数を数えてそれを返します。
1つ目の引数のセル範囲はRangeオブジェクトを利用しています。そのため呼び出し側でSelectionなどをそのまま渡すことが可能です。
2つ目の引数はInterior.Colorプロパティを指定します。ColorプロパティはLong型の値になっており、RGB関数でも同じ値になるため、RGB関数をそのまま渡すことが可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Function CountSameColor(a_Range As Range, a_lBkColor As Long) Dim lSameCount '// 同一背景色の数 Dim r As Range '// セル lSameCount = 0 '// 指定セル範囲をループ For Each r In a_Range '// 指定色と同じ背景色の場合 If (r.Interior.Color = a_lBkColor) Then '// 同一背景色の数を加算 lSameCount = lSameCount + 1 End If Next '// 同一背景色の数を返却 CountSameColor = lSameCount End Function |
コード説明
指定セル範囲を引数で渡せるようにしています。
Rangeオブジェクトを利用していますが、これには2つ理由があります。1つはSelectionオブジェクトをそのまま利用することができることです。Selectionをそのまま渡すことが出来ればコーディングがラクになります。もう1つの理由はFor Each構文でRangeオブジェクトとしてループ処理が可能になります。そのためRangeオブジェクトのプロパティをそのまま利用することが可能になり、後続の背景色の判定処理がラクになります。
指定色と同じ背景色かどうかの処理ですが、RangeオブジェクトのInterior.Colorプロパティを利用しています。
ColorIndexプロパティを使いたい場合は10行目のColorをColorIndexに変更するだけです。あとは呼び出し元で第二引数に渡す色をColorIndexに変更します。
そして、同じ色かどうかの判定で一致した場合に同一背景色の数を加算します。
テスト用コード
以下は上の関数のテスト用コードです。
上の関数を3回呼び出しています。
それぞれ、選択セル範囲でのA1セルと同じ背景色の数、選択セル範囲での赤いセルの数、指定セル範囲の赤いセルの数、を取得します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Sub CountSameColorTest() Dim lBkColor As Long '// 背景色 Dim lSameCount '// 同一背景色の数 '// A1セルの背景色を取得 lBkColor = Range("A1").Interior.Color '// 選択セル範囲の中でA1セルの背景色と同じ色の数を取得 lSameCount = CountSameColor(Selection, lBkColor) Debug.Print lSameCount '// セル選択範囲の中で背景色が赤のセルの数を取得 lSameCount = CountSameColor(Selection, RGB(255, 0, 0)) Debug.Print lSameCount '// A1からC3セルの中で背景色が赤のセルの数を取得 lSameCount = CountSameColor(Range("A1:C3"), RGB(255, 0, 0)) Debug.Print lSameCount End Sub |
実行結果
以下のような背景色が設定されたシートでテストコードを実行します。
テストコードを実行すると以下のようになります。
4
3
1
9行目の結果の4は、A1からD6までの選択セル範囲の中でA1セルの水色のセルが4つあることを意味します。
13行目の結果の3は、A1からD6までの選択セル範囲の中で赤色のセルが3つあることを意味します。
17行目の結果の1は、A1からC3までの選択セル範囲(絵の赤枠部分)の中で赤色のセルが1つあることを意味します。