pickup

目次

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).Value = Red_cnt
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

ここでリセットをしないと、カウントしたセルに個数が、次々に加算されていきます。

カウント系の変数は、役目が終わったら、リセットしましょう。


ただ、一般的には、プログラムのできるだけ早く、変数はリセットしたほうがいいかと思います。

理由は、プログラム開始時に、変数にどのような値が入っているがわからないからです。

ここがポイント

ここがポイント
Function8.png
今回は、二重ループが問題でした。初心者なら、普通のループのみでも混乱するのに、二重ループになると、余計に、混乱します。しかし、二重ループを理解できたら、100行のコードでも、20行くらいになります。行数が少ないという事は、変数や、ループを上手に利用できているという事です。

スキルの高い人のコードには、無駄がないですよね

 

まとめ

VBAは可能性を広げます。

これで、競馬の予想にも力が入ります。

夏競馬、頑張りたいと思います。

今回のサンプルファイルは、No168です。

毎日の業務が、3時間短縮できます

わからない事を延々と考えるのは、無駄です。

  • なんで作動かないの?
  • もうやだ!VBAなんか嫌い!
  • ネットで調べても情報がない!

必ず作動するコードが、ここにあります。

スポンサーリンク

Twitterでフォローしよう

おすすめの記事