【Excel】条件付き書式で塗りつぶしたセルの数を自動でカウントする|講座#5

Word・Excel

先日、下記記事

【Excel】条件付き書式で表示された色の数を自動集計する|講座#4
「できない」と言われていた、条件付き書式で変更した色を自動的にカウントする方法…実はあるんです!分かりやすい解説と、VBAコードをコピペするだけのお手軽作業なので誰でもできます。

にリクエストをいただきました。

 

【リクエスト内容】
こちらのVBAを使わせていただき大変助かっております。
同じように背景色を条件付き書式で色付けしたセルのカウントはできますか?

 

文字色の数をカウントできるなら、塗りつぶしたセルの数もカウントしたい。

そうお考えになるのは当然ですよね!

タイトルが紛らわしく、大変失礼いたしました。

 

この記事をお読みいただけば、(前回と同様に)VBAコードをコピペするだけで簡単に設定できます!

 

もちろん「条件付き書式で付けた文字色の数を自動カウントする」コードと併用可能

ぜひご活用ください。

 

これまた前回までと同様、あえてバージョンの低いエクセルで作っています。2021でも動作確認済みですので、「自分が使ってるのは20〇〇なんだけど……」という方もぜひ試してみて下さい。

 

FURIO
FURIO

各画像はクリックで拡大できるよ!

 

スポンサーリンク
スポンサーリンク

自動書式で塗りつぶされたセルの数をカウントする方法

分かりやすくするため、前回と同じくカレンダー画像を使って説明します。

 

今回行うのは、塗りつぶされたセル数の集計です。

下記画像で説明しますと、「1・2・3」の背景色として薄いオレンジ色が付けられていますね。

 

 

この「塗りつぶされたセルの数」を、自動でカウントできるようにしていきましょう!

 

作業➊ 塗りつぶしセルの設定

「この背景色がついたら、数をカウントしたい」

あなたがそうお考えの色で、適当なセルを塗りつぶしましょう。

 

今回は適当に「G1」セルを塗りつぶしました。

 

FURIO
FURIO

塗りつぶしセルは別シートに作っても大丈夫だよ!

 

作業❷ 関数の入力

せっかくですので、前回までのカレンダーを活かします。

色を塗ったセルは祝日になりますので、休日の下に「(うち祝日)」という欄を設けました。

 

この「G15」セルに、

=CountColor2(B6:H11,G1)

をコピペします。

「B6:H11」は範囲、「G1」は対象とする塗りつぶしセルです。

 

ここまでの作業を行っても、エラー表示になっていると思います。

 

が、これで合っています!

ここにマクロをはめ込めば、アッという間に機能しますのでご心配なく!

 

 

FURIO
FURIO

続いて、VBAの作業だよ



作業❸ VBAにコードを設定(コピペで簡単!)

「開発」タブを表示します。

 

【開発タブを表示する方法】

どこでもいいので、リボンの上で右クリック

→「リボンのユーザー設定」を選択

 

「開発」にチェックを入れる→OKを押す

これで表示されます!

 

「開発」タブの「Visual Basic」を開きます。

 

左側、白い部分で右クリック →「挿入」→「標準モジュール」を選択

すでに「標準モジュール」がある方は、「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には保存ボタンがありませんので、×で閉じます。

エクセルの表示はまだエラーのままだと思いますので、どこでもいいからセルをダブルクリックすると表示が変わります。

 

 

FURIO
FURIO

手入力で変更した色にも対応するコードなので、「条件付き書式で変更された色」含め、すべて自動集計できるよ!

 



作業❹ ファイルの保存

保存するときは「マクロ有効ブック」を選択しましょう!

「ファイルの種類」から「Excelマクロ有効ブック」を選択します。

 

ふつうにエクセルとして保存すると、せっかくのVBAコードが消えてしまいますのでご注意ください!

更新ボタンを作ろう!

上記のVBAを試したけど、カウントが変更されない…という時の対処法です。

 

たとえば自分でセルを塗りつぶしたけど、どこかのセルをダブルクリックしないとカウント数が変わらない…ということが起こると、困ってしまいますよね。

 

そこで、これを押せば一発変更という「更新ボタン」を作りましょう

 

作り方はとっても簡単。

コードもコピペで大丈夫です。

 

作業➊ 更新ボタンの作成

「開発」タブにある、「挿入」の▼をクリックし「フォームコントロール」を開きます。

 

マクロを登録するためのボタンを選びます。

今回は普通に左上の「ボタン」を選択しますが、

 

自分のお好みでイラストを使うこともできます。

▲ こういったイラストにもマクロ登録できるよ!

 

今回は、このあたりに設置します。

 

ダイアログボックスが表示されますが、ひとまずOKで大丈夫です。

 

ボタンが設置されました。設置後でも名前変更できます。

 



作業➋ VBAにコードを設定(コピペで簡単!)

「開発」タブのまま「Visual Basic」を開きます。

 

 開くと、標準モジュールで登録したコードが表示されると思います。

その一番下をクリックすると、カーソルが点滅します。

 

カーソルの位置に、以下のコードをコピペします。

Sub updata()
Application.Calculate
End Sub

 

作業➌ マクロの割り当て

通常のエクセルに戻り、設置したボタンを右クリック→「マクロの登録」を選択

 

「updata」という項目があるはずなので、それを選択 → OK

 

試しにどこかのセルを塗りつぶしてみましょう。

塗りつぶしただけでは集計数は変わりませんが、更新ボタンを押せば自動でカウントされます。

 

これで完成です!

本当にお疲れ様でした!

 

FURIO
FURIO

お疲れさまでした!

こちらの記事も、お役に立てれば何よりです。

よかったら講座の最初からカレンダーを作ってみてね。

 

♦今回の講座一覧

【Excel】カレンダー作成で基礎から学べるエクセル講座#1
初心者~中級者向け。超基本的な操作から、誰も教えてくれない応用テクニックまで。この記事だけで、ワンランク上のエクセル操作が学べます!
【Excel】西暦を入力すると、日付が自動変更される方法|講座#2
カレンダー作成で学ぶエクセル講座#2。西暦を入力すると、それに対応したすべての日付が自動で表示される方法です。
【Excel】カレンダーに合わせて日付の色を自動で変える|講座#3
自動でカレンダーの日付を表示したとき、さらに自動で色を変更する方法です。関数を使って「休日を赤」に、表示されてしまった「当月以外の日付を薄い灰色」にすることができます。
【Excel】条件付き書式で表示された色の数を自動集計する|講座#4
「できない」と言われていた、条件付き書式で変更した色を自動的にカウントする方法…実はあるんです!分かりやすい解説と、VBAコードをコピペするだけのお手軽作業なので誰でもできます。



コメント

  1. PI より:

    条件付き色のカウント、とても役に立っております。
    時間別にカウントが出来便利に使わせてもらっています。
    困っていることがありまして、朝6:00~23:00までの分単位で制作し、列単に150行ほどのデーターです。車両の出庫管理です。シートは22シート。非常に重くて、
    何かいい方法はありますでしょうか・・・
    作業が終わってから、更新ボタンを押してでも構いません。
    お知恵を頂ければと思います。

    • FURIO より:

      コメント及び、記事が役に立っているとのこと、本当にありがとうございます!
      ご質問いただきました件で、数点確認させていただきたいのですがよろしいでしょうか?
      ・22シートすべてでカウントされている状態でしょうか?
      ・カウントを行う前は、サクサク動いていましたでしょうか?(マクロや計算式を入れてから重くなりましたか?)
      ・常に重い状態でしょうか?それとも、一定の操作を行うと重くなりますか?
      ・最終的に求めているのは、重くて動かない状況を改善するということでよろしいですか?
      ・エクセルのバージョンは何を使われていますか?(Excel 2024など)
      こちらの記事で紹介している方法は「色がついたらカウントされる」仕組みですので、ひとつの作業につきひとつカウントされる…と想像しているのですが、もしかして別に集計シートも作られていたりするのでしょうか?いまいち状況が把握できておらず申し訳ありません。また詳しいことをお教えいただければ対策が立てられるかもしれません。よろしくお願い致します。

      • PI より:

        返信ありがとうございます。
        必要な内容不足申し訳ありません。
        ・22シートすべてでカウントされている状態でしょうか?
          シート1で1列ごと集計しています。1列だけで143行です。
           例えばA地点と過程して(1シート)に8:10、143台中15台が入っている。8:15には10台入っている。1分ごとに細かくぎって23:00までと言う(シート1)。
        B地点(シート2)・・・C地点(シート3)・・・で22シートです。
        あまりにも再計算始まると重いのでシート1を一つのブックで保存した方がいいのでしょうか。シート1だけで1ブックなら多少は軽くなります。
        シートが多ければ多いほど再計算に時間がかかるようです。
        シート1だけで1ブックでも、もっと軽くすることは可能でしょうか。
        作業中、常に重いわけではありません。
        再計算が始まるタイミングは集計するセルでエンターを押すと再計算が始まるようです。この再計算を最終的にもっと軽くできたらいいなと思ってました。
        説明が下手で申し訳ありません。
        よろしくお願いします。
          

        • FURIO より:

          ご返信ありがとうございます。
          私がその場にいてPIさんのエクセルを拝見できればいいのですが(そうもいきませんので)、お話を伺った中で自分なりに想像し、下記画像のようなものかと考えてみました。



          たとえば8:10に10台の出庫があり、8:15には15台の出庫があったとします。
          このうち条件付き書式で、15台未満なら緑に、15台以上なら青になるように設定しているとします。
          そして最終的に、緑の数は2、青の数は3と自動集計されるマクロ(記事でご紹介したVBA)も設定されているとします。
           
          これが上記のような狭い範囲ならいいのですが、下記画像のように膨大な範囲を集計するとなると、とても時間がかかります(約14秒でした)



          以上を踏まえまして、私からのアドバイスは以下のようになります。

           
          【1】ご回答いただいておりませんが、おそらく重くなったのはVBAを設定してからではないかと思います。
          その場合は、カウント範囲(上記画像ですと、色をカウントするために「=CountColor2(B2:XFD6,B10)」という数式が入っております。範囲とは、このうち「B2:XFD6」の部分をさします)を狭くすることで動作を軽くすることができます。
           
          方法としては、二つ。
          ひとつは、文字通り集計範囲を狭くする。
          もう一つは、集計をいくつかに分けることです。今まで一度にAAAという集計を行っていたのを、Aの集計+A’の集計+A’’の集計=AAAというふうに、集計段階をいくつかに分けます。

           
          【2】動作が重いのはVBA設定以前からである場合、条件付き書式の範囲が大きすぎて重いと言う可能性も考えられます。
          条件付き書式はコピー貼り付けを繰り返したり、シート間をまたいで設置したりすると、どんどん範囲が膨らんでいきます。こちらも一度見直しをしてみてはいかがでしょう?
          設置していないのにいくつも条件付き書式ができていたら、不要な分を削除してみて下さい。
           
          現段階でできるアドバイスはこんなところです。
          お役に立てば幸いです。

  2. PI より:

    返信ありがとうございます。
    言葉で表すと表現が難しく申し訳ありません。
    非常に参考になりました。
    頑張ってみたいと思います。
    いろいろありがとうございました。

    • FURIO より:

      ご返信ありがとうございます。
      私の拙い理解力での回答でしたが、参考になったようでしたら幸いです。
      また分からないことがありましたら、ご相談いただければと思います。

  3. ikori60 より:

    こんにちは。
    条件付きで色付けしたセルの値を
    合計したいと思い、こちらに辿り着きました。

    こちらの記事はセルのカウントとの事ですが、
    何か良い方法があればご教示いただけますと幸いです。

    • FURIO より:

      コメントありがとうございます。返信が遅くなり申し訳ありません。
      ご質問いただきました「色付けしたセルの値を合計したい」について、確認させて頂ければと思います。

      まず、どのように値を合計したいのかということなのですが、下記画像のように



      色を塗ったセルがまったく同じ列である場合と、バラバラに塗られている場合、どちらになりますでしょうか?

      また、セルへの色付けですが、ご自分が操作して色を付けることはありますか?それとも条件付き書式でのみで色を付けましたか?あるいは、その両方を同時に行っていますでしょうか?
      一言で値のカウントと言いましても、状況によって簡単にできるか、それとも複雑なのでマクロでしか対応できないのかが変わってまいります。
      複雑な場合、コメント欄の返信ではなく記事にしてお伝えした方がいいようにも思いますので、よろしくお願い致します。

  4. ikori60 より:

    ご返信ありがとうございます。
    色付けは同じ列にされており、条件付き書式の条件により3色(赤・青・緑)+条件外の色なしに塗分けされています。
    表の下部(画像ですとセル5の下)に、合計を表示するセルが3つあり、「赤セルの合計」「青セルの合計」「緑セルの合計」を表示させたいと思っています。
    また、列は3列あり、それぞれの列ごとで計算するようにしたいです。

    セルの色付けは条件付き書式のみで行います。

    お手数お掛けいたしますが、何卒よろしくお願い申し上げます。

    • FURIO より:

      ご返信が遅くなり申し訳ございません。
      リクエストいただきました「条件付きで色付けしたセルの値を合計する」方法を記事にまとめました。
      検索していただきました記事と同様、マクロで簡単に集計できるようになっておりますので、よろしければご覧ください。よろしくお願い致します。

      ▼ 【Excel】条件付き書式で色をつけたセルの数値を自動で合計する
      https://pcwebfun.com/excel-sum-values-color-cells/

  5. ikori60 より:

    該当の記事を確認し、理想の形で作成することができました!
    ご丁寧な解説を記事にしていただき、本当にありがとうございます。

    自身でもしっかりと勉強して、今後に役立てたいと思います。

    • FURIO より:

      記事がお役に立ちましたこと、またご連絡をいただきましたこと、本当に嬉しいです!
      ぜひエクセルを学んでみてください。できるようになるほど楽しく、実用面でも役立ちます。こちらこそ貴重なご意見をいただき、ありがとうございました。