目次
VBAでセルの色をカウントする
こんにちは。伊川(@naonaoke)です。
今回は、VBAで色をカウントします。
なかなか、色をカウントする関数はないので、VBAでカウントするしかないです。
ユーザー定義関数を作成して無理矢理カウントできます。
しかし、カンタンにカウントしたいと思います。
今回のブログは、こんな人にお勧め
例えば、上のような図で、赤、青、黄色のセルをカウントしたいと思います。
こんな感じで表示されます。
今回のお題
- セルの色をVBAでカウントする
- 横列の色をカウントして、色別に集計をする
今回の必要な知識
- Select Case
- 二重ループ
- カウントアップ
色をカウントする
上の図が出頃なので、これをサンプルに記載します。
色をカウント 作業手順 その1 変数を設定
Dim Red_cnt As Long ⇒ 赤をカウント
Dim yellow_cnt As Long ⇒ 黄色をカウント
Dim Black_cnt As Long ⇒ 黒をカウント
Dim i As Long ⇒ 縦列をカウントする変数
Dim j As Long ⇒ 横列をカウントする変数
Dim mycolor As Long ⇒ カラー番号をカウントする
この変数を利用します。
色をカウントする 作業手順 その2 二重ループ
For i = 2 To 6
For j = 2 To 9
mycolor = Cells(i, j).Interior.ColorIndex
このようにして、変数、I,j を使って、下図のカラー番号の値を取得します。
色をカウントする 作業手順 その3 select caseでカウントアップする
Select Case mycolor
‘赤
Case 3
Red_cnt = Red_cnt + 1
‘黄色
Case 6
yellow_cnt = yellow_cnt + 1
‘黒
Case 1
Black_cnt = Black_cnt + 1
End Select
カウントアップの意味
Red_cnt = Red_cnt + 1
赤をカウントする変数に、赤を見つけたら、1個ずつカウントをしていくという意味です。
ここが、なかなか難しいです。
A=A+1とういような技をよく使いますが、このカウントアップが理解できると、面白くなります。
色をカウントする 作業手順 その4 セルに表現する
Cells(i, j + 1).Value = yellow_cnt
Cells(i, j + 2).Value = Black_cnt
上のように記載します。
ここがなかなか難しいです。
ループを使うときには、必ずといっていいほどに、この壁にぶつかります。
For i = 2 To 6
For j = 2 To 9
For構文の中で、使っている変数、I jがあります。
この変数を使って、セル表示させることを考えます。
For~Nextは、ループを実行しますが、このNextの位置も重要になります。
この場合は、まず、Next jの位置を決めなければなりません。
変数 jについて考える
変数jのループが終了していることを考えると下記のようになります。
変数I について考える
このように考えると、なぜか、私は、納得できました。
色をカウントする 作業手順 その5 最後にカウントをリセット
Red_cnt = 0
yellow_cnt = 0
Black_cnt = 0
ここでリセットをしないと、カウントしたセルに個数が、次々に加算されていきます。
カウント系の変数は、役目が終わったら、リセットしましょう。
ただ、一般的には、プログラムのできるだけ早く、変数はリセットしたほうがいいかと思います。
理由は、プログラム開始時に、変数にどのような値が入っているがわからないからです。
ここがポイント
今回は、二重ループが問題でした。初心者なら、普通のループのみでも混乱するのに、二重ループになると、余計に、混乱します。しかし、二重ループを理解できたら、100行のコードでも、20行くらいになります。行数が少ないという事は、変数や、ループを上手に利用できているという事です。
スキルの高い人のコードには、無駄がないですよね。
まとめ
VBAは可能性を広げます。
これで、競馬の予想にも力が入ります。
夏競馬、頑張りたいと思います。
今回のサンプルファイルは、No168です。
わからない事を延々と考えるのは、無駄です。
- なんで作動かないの?
- もうやだ!VBAなんか嫌い!
- ネットで調べても情報がない!
必ず作動するコードが、ここにあります。