PR

エクセルで色付きセルをカウントする方法|VBA対応と色管理を見直す設計改善まで解説

Excel
記事内に広告が含まれています。

赤く塗ったセルは、全部で何件あるのか知りたい。
でも、エクセルで色付きセルをカウントしようとしても、COUNTIFでは数えられない。

「関数で色をカウントすることはできないの?」
「条件付き書式の色は集計できないの?」

そんな疑問でこの記事にたどり着いたのではないでしょうか。

結論から言うと、エクセルは「色」をデータとして扱っていません。
そのため、色付きセルはそのままではカウントできないのです。

この記事では、色付きセルをカウントする方法を紹介します。
ただし、色管理のままでは集計や報告が難しくなるケースも少なくありません。
そこで本記事では、単なるカウント方法だけでなく、設計の改善方法まで解説します。

🔍今回の記事で分かること
  • 手入力の色と条件付き書式の違い
  • 色管理から抜け出す実務改善の設計
  • 色付きセルをカウントする方法

エクセルで色付きセルをカウントできない理由

エクセルで色付きセルをカウントしようとして、COUNTIF関数が使えないことに気づいた方は多いはずです。

結論から言うと、エクセルはセルの「色」をデータとして認識していないためです。

COUNTIF関数やCOUNTIFS関数は、
・数値
・文字列
・条件式

といった「値」を対象に集計します。

しかし、セルの色はあくまで「表示形式」であるため、データそのものではありません。

そのため、エクセルでは色付きセルをそのままカウントすることはできない仕様になっています。

条件付き書式の色はなぜ集計できないのか

「条件付き書式なら数えられるのでは?」そう思うかもしれません。
しかし、条件付き書式も同じです。

条件付き書式で色が付いているセルは、あくまで条件の結果として色が表示されているだけです。

例えば、以下のようなタスク管理表があったとします。
・「完了状況」が「未完了」の場合 → 赤色
・「完了状況」が「進行中」の場合 → 黄色

・「完了状況」が「開始前」の場合 → 青色
で書式を設定しています。

ですが、完了以外のタスクを数えたい場合、
・赤色/黄色/青色セル
を拾うのではなく、
・完了状況が「完了」以外
となっているものが、本当に集計すべき行となります。

つまり、色ではなく「条件」を数えるのが正解です。

エクセルを色で管理してしまう理由

では、そもそもなぜ文字列ではなく色で管理してしまうのでしょうか。
実務でエクセルを使っていると、次のような理由から色で管理してしまうケースが多いと感じます。

■入力が早いから

→「未対応」であれば赤色を塗る、としていた場合、色塗りであれば一瞬で表示できます。
「未対応」と文字を入力するより圧倒的に早く処理することができます。

■視認性が高いから

→人は文字より色を認識するほうが一般的に早いと言われています。
一覧表でも、色が付いていたほうが直感的で分かりやすいケースもあります。

■集計を想定していないから

→「色付きセルを集計したい」と検索しているということは、おそらく集計を想定していなかったケースも考えられます。
色管理はしやすいですが、集計が必要になると困るケースが多くなりがちです。

このように、入力や視認性としては色管理するメリットもある一方、データ集計という点では不便であるデメリットも存在します。

色管理が引き起こす実務上の問題

色で管理していると、次のような問題が発生します。

★問題となるポイント
⚠️未対応件数を即答できない
⚠️並び替えやCSV取込で状態が分からなくなる

⚠️完了率を数値化できない
⚠️自動集計ができない
⚠️引き継ぎ時にロジックが分からない

特に「報告」が必要になったとき、色管理は弱点になります。

色管理は簡単で便利な一方、組織で使うには再現性と数値化が必要です。

エクセルで正しく状態管理する設計方法

ではどのように管理するのがよいか。

改善のポイントはシンプルで、
・色をやめるのではなく、色とロジックを分離する
ことで、管理しやすくなります。

ステップ1:判定列を作る

先ほどのタスク管理表で、
・「完了状況」が「完了」 → 1
・「完了状況」が「完了」以外 → 0

として、判定列を作ります。

ステップ2:条件付き書式で色を付ける

先ほど追加した判定列に、
・判定が1 → 赤色
・判定が0 → 色なし

と条件付き書式を設定します。

ステップ3:COUNTIFで集計する

最後に、判定列をCOUNTIF関数でカウントします。
今回の場合は、以下のように数式を入力しています。

=COUNTIF(J2:J6,1)

こうすることで、
・集計/自動更新が可能になる
・色でも認識できる
・引き継ぎもしやすくなる

ファイルになります。

色は「管理」ではなく、管理結果を可視化する装飾として使うのが正解です。

どうしても色付きセルをカウントしたい場合

どうしても既存ファイルの色付きセルをカウントしたい場合、
・フィルターでカウントする
・VBAを使用してカウントする

という方法があります。

フィルターで色付きセルをカウントする場合

簡単に色付きセルをカウントしたい場合、フィルターを使用します。

例えば以下のタスク管理表から、黄色行のみをカウントしたい場合、
・「フィルター」→「色フィルター」→黄色を選択
することで、下のほうに黄色行の件数が表示されます。

VBAで色付きセルをカウントする場合(通常の色)

VBAで色付きセルをカウントしたい場合、
・Alt + F11でVBAエディタを開く
・上部にある「挿入」メニューより、「標準モジュール」

を選択し、以下のVBAをコピペします。

Function CountColor(rng As Range, colorCell As Range) As Long
    Dim c As Range
    For Each c In rng
        If c.Interior.Color = colorCell.Interior.Color Then
            CountColor = CountColor + 1
        End If
    Next c
End Function

このVBAでは、色をカウントする数式を自作しています。
構文は以下の通りです。

=CountColor(範囲,検索するセルの色)

カウントしたいセルの色を指定することで、その色のセルの個数をカウントすることができます。

💡ポイント
  • 数式を入力したあとにセルの色を変えた場合、カウントが更新されないことがあります。そのときは「Ctrl」+「Alt」+「F9」キーで再計算してください。
  • 条件付き書式で色が付いたセルはカウントできません。

VBAで色付きセルをカウントする場合(条件付き書式の色)

条件付き書式のセルをカウントするには、先ほどの自作関数ではなく、別のVBAを作成する必要があります。

今回は、以下のタスク管理表のA列にある黄色セル(L2セルを参照)をカウントしてみます。

カウントするには、以下のようにVBAを入力します。

Sub CountDisplayedColor()
    Dim rng As Range
    Dim colorCell As Range
    Dim c As Range
    Dim count As Long
    
    Set rng = ActiveSheet.Range("A2:A6")      '←使用環境に応じて変更してください
    Set colorCell = Range("L2")     '←使用環境に応じて変更してください
    
    For Each c In rng
        If c.DisplayFormat.Interior.Color = colorCell.DisplayFormat.Interior.Color Then
            count = count + 1
        End If
    Next c
    
    MsgBox "該当セル数: " & count
End Sub

こちらのVBAを実行することで、指定した色付きセルの個数がメッセージに表示されます。

今回色付きセルをカウントする方法を紹介しましたが、VBAは
・マクロ有効ブックが必要
・共有環境で制限されることがある
・設計改善にはならない

というデメリットがあります。

そのため、応急処置として使うのが適切です。

まとめ|色は管理ではなく「可視化」

エクセルで色付きセルをカウントできないのは、不具合ではありません。
色が「データ」ではなく「表示」だからです。

色で管理することで、視認性も高く、使い方によっては見やすくなるということはあります。

しかし実務では、最終的に求められるのは「見やすさ」ではなく「数値化」です。
色は管理の手段ではなく、管理結果を分かりやすくするための装飾です。

どうしても色で集計したいという場合は、今回紹介したフィルターやVBAを活用してみてください。
ですが、「色とロジックは分離する」という視点でデータを作成することが、後々集計に困ることを減らすことができます。
そのような困った状況になる前に、ファイルを見直してみることをオススメします。

最後まで読んでいただき、ありがとうございました。

ろじゃー

仕事・子育てに奮闘中の社会人です。
仕事でも日常生活でも、ちょっとでも便利になることが紹介できるブログを書いています!
 
仕事柄、PC操作やエクセル、VBAなどは得意です!
Excel歴は10年以上の事務職。
関数やVBAを活用して、資料作成やデータ分析をはじめとした様々な業務の効率化・自動化に取り組んできました。
 
このブログでは、実際の業務で使える効率化テクニックを発信しています。
「わからない」や「困った」など問題を抱える方や、もっと効率化したいと思っている方に、少しでも役立てれば幸いです!

ご質問・ご相談など、お気軽にご連絡ください。

ろじゃーをフォローする
ご質問・ご相談はこちらへ!
 ろじゃー|日々、ちょっとずつ良くなることを目指すブロガー
Excel歴10年以上。VBAや関数、業務効率化などを発信中。
📩 お問い合わせはこちら
Excel
シェアする
ろじゃーをフォローする

コメント

タイトルとURLをコピーしました