先日、下記記事

にリクエストをいただきました。
こちらのVBAを使わせていただき大変助かっております。
同じように背景色を条件付き書式で色付けしたセルのカウントはできますか?
文字色の数をカウントできるなら、塗りつぶしたセルの数もカウントしたい。
そうお考えになるのは当然ですよね!
タイトルが紛らわしく、大変失礼いたしました。
この記事をお読みいただけば、(前回と同様に)VBAコードをコピペするだけで簡単に設定できます!
もちろん「条件付き書式で付けた文字色の数を自動カウントする」コードと併用可能!
ぜひご活用ください。

各画像はクリックで拡大できるよ!
自動書式で塗りつぶされたセルの数をカウントする方法
分かりやすくするため、前回と同じくカレンダー画像を使って説明します。
今回行うのは、塗りつぶされたセル数の集計です。
下記画像で説明しますと、「1・2・3」の背景色として薄いオレンジ色が付けられていますね。
この「塗りつぶされたセルの数」を、自動でカウントできるようにしていきましょう!
作業➊ 塗りつぶしセルの設定
「この背景色がついたら、数をカウントしたい」
あなたがそうお考えの色で、適当なセルを塗りつぶしましょう。
今回は適当に「G1」セルを塗りつぶしました。

塗りつぶしセルは別シートに作っても大丈夫だよ!
作業❷ 関数の入力
せっかくですので、前回までのカレンダーを活かします。
色を塗ったセルは祝日になりますので、休日の下に「(うち祝日)」という欄を設けました。
この「G15」セルに、
をコピペします。
ここまでの作業を行っても、エラー表示になっていると思います。
が、これで合っています!
ここにマクロをはめ込めば、アッという間に機能しますのでご心配なく!

続いて、VBAの作業だよ
作業❸ VBAにコードを設定(コピペで簡単!)
➊「開発」タブを表示します。
➊ どこでもいいので、リボンの上で右クリック
→「リボンのユーザー設定」を選択
➋「開発」にチェックを入れる→OKを押す
これで表示されます!
➋「開発」タブの「Visual Basic」を開きます。
➌ 左側、白い部分で右クリック →「挿入」→「標準モジュール」を選択
➍ 下記画像を参考にして、
右側に表示されたスペースに、以下のコードをコピペして下さい。
Function CountColor2(rng As Range, r2 As Range) As Long
Dim myRng As Range
Dim Col_cnt As Long
Dim sh As Worksheet
Application.Volatile
Col_cnt = 0
Set sh = rng.Parent
For Each myRng In rng
If sh.Evaluate("CColor2(" & myRng.Address & ")") = r2.Interior.Color Then
Col_cnt = Col_cnt + 1
End If
Next myRng
CountColor2 = Col_cnt
End Function
Function CColor2(r As Range) As Long
CColor2 = r.DisplayFormat.Interior.Color
End Function
➎ Visual Basicには保存ボタンがありませんので、×で閉じます。
エクセルの表示はまだエラーのままだと思いますので、どこでもいいからセルをダブルクリックすると表示が変わります。

手入力で変更した色にも対応するコードなので、「条件付き書式で変更された色」含め、すべて自動集計できるよ!
作業❹ ファイルの保存
保存するときは「マクロ有効ブック」を選択しましょう!
「ファイルの種類」から「Excelマクロ有効ブック」を選択します。
ふつうにエクセルとして保存すると、せっかくのVBAコードが消えてしまいますのでご注意ください!
更新ボタンを作ろう!
上記のVBAを試したけど、カウントが変更されない…という時の対処法です。
たとえば自分でセルを塗りつぶしたけど、どこかのセルをダブルクリックしないとカウント数が変わらない…ということが起こると、困ってしまいますよね。
そこで、これを押せば一発変更という「更新ボタン」を作りましょう!
作り方はとっても簡単。
コードもコピペで大丈夫です。
作業➊ 更新ボタンの作成
➊「開発」タブにある、「挿入」の▼をクリックし「フォームコントロール」を開きます。
➋ マクロを登録するためのボタンを選びます。
今回は普通に左上の「ボタン」を選択しますが、
自分のお好みでイラストを使うこともできます。
▲ こういったイラストにもマクロ登録できるよ!
➌ 今回は、このあたりに設置します。
➍ ダイアログボックスが表示されますが、ひとまずOKで大丈夫です。
➎ ボタンが設置されました。設置後でも名前変更できます。
作業➋ VBAにコードを設定(コピペで簡単!)
➊「開発」タブのまま「Visual Basic」を開きます。
➋ 開くと、標準モジュールで登録したコードが表示されると思います。
その一番下をクリックすると、カーソルが点滅します。
➌ カーソルの位置に、以下のコードをコピペします。
Application.Calculate
End Sub
作業➌ マクロの割り当て
➊ 通常のエクセルに戻り、設置したボタンを右クリック→「マクロの登録」を選択
➋「updata」という項目があるはずなので、それを選択 → OK
➌ 試しにどこかのセルを塗りつぶしてみましょう。
塗りつぶしただけでは集計数は変わりませんが、更新ボタンを押せば自動でカウントされます。
これで完成です!
本当にお疲れ様でした!

お疲れさまでした!
こちらの記事も、お役に立てれば何よりです。
よかったら講座の最初からカレンダーを作ってみてね。
♦今回の講座一覧




コメント
条件付き色のカウント、とても役に立っております。
時間別にカウントが出来便利に使わせてもらっています。
困っていることがありまして、朝6:00~23:00までの分単位で制作し、列単に150行ほどのデーターです。車両の出庫管理です。シートは22シート。非常に重くて、
何かいい方法はありますでしょうか・・・
作業が終わってから、更新ボタンを押してでも構いません。
お知恵を頂ければと思います。
コメント及び、記事が役に立っているとのこと、本当にありがとうございます!
ご質問いただきました件で、数点確認させていただきたいのですがよろしいでしょうか?
・22シートすべてでカウントされている状態でしょうか?
・カウントを行う前は、サクサク動いていましたでしょうか?(マクロや計算式を入れてから重くなりましたか?)
・常に重い状態でしょうか?それとも、一定の操作を行うと重くなりますか?
・最終的に求めているのは、重くて動かない状況を改善するということでよろしいですか?
・エクセルのバージョンは何を使われていますか?(Excel 2024など)
こちらの記事で紹介している方法は「色がついたらカウントされる」仕組みですので、ひとつの作業につきひとつカウントされる…と想像しているのですが、もしかして別に集計シートも作られていたりするのでしょうか?いまいち状況が把握できておらず申し訳ありません。また詳しいことをお教えいただければ対策が立てられるかもしれません。よろしくお願い致します。