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に結果を表示するようにしています。
これで、塗りつぶされているセルの件数を求めることができました。
ただし、このプログラム文は、セルが塗りつぶされているか、そうでないかの判断しかできません。
たとえば、赤色は何件で、緑色は何件というプログラム文ではありませんので、ご注意ください。