一度だけ数えるなら「色フィルター」、結果をセルに残すならVBAのCountColorが便利です。条件付き書式の色は、判定条件をCOUNTIFSで数える方法を優先します。
デスクトップ版 Excel / VBAはWeb版では実行不可
まずは「色」より「条件」で数えられないか確認
たとえば「完了」の行を緑にしているなら、色そのものではなく「完了」という値を数えるほうが管理しやすくなります。A2:A10に作業名、B2:B10に状態がある表なら、次の式で完了件数を求められます。
=COUNTIFS(B2:B10,"完了")手動で塗った色だけが判断材料の場合は、次の色フィルターかユーザー定義関数を使います。
マクロを使わず、色フィルターで数える
- 見出しを含む表を選択し、[データ]→[フィルター]を選びます。
- 色を付けた列の▼を開き、[色フィルター]で対象の塗りつぶし色を選びます。
- 表の外に次の式を入力します。A列には、各行に必ず入っている作業名やIDを指定してください。
=SUBTOTAL(103,A2:A10)103は、表示されている空白でないセルを数えます。色付きでもA列が空白の行は数えません。数式で空文字列を返すセルは空白扱いにならないため、IDなどの列を使うのが確実です。
CountColorを登録する
- Windows版ではAlt + F11でVBEを開き、[挿入]→[標準モジュール]を選びます。Mac版は[ツール]→[マクロ]→[Visual Basic Editor]から開けます。
- 次のコードを標準モジュールに貼り付けます。
- ブックをExcelマクロ有効ブック(.xlsm)として保存します。マクロは内容を理解したファイルでのみ有効にしてください。
Option Explicit
Public Function CountColor(ByVal cells As Range, _
ByVal sample As Range) As Long
Application.Volatile
Dim cell As Range
Dim count As Long
For Each cell In cells.Cells
If cell.Interior.Color = sample.Cells(1, 1).Interior.Color Then
count = count + 1
End If
Next cell
CountColor = count
End Functionワークシートで関数を使う
B2:B10に色を付け、E2を数えたい色で塗ります。結果を表示するセルに次の式を入力してください。
=CountColor(B2:B10,E2)この関数は値の有無にかかわらず、塗りつぶし色が同じセルを数えます。E2は必ず目的の色で塗り、範囲はB:Bなどの列全体ではなく必要な行に限定してください。この関数は非表示の行も含めて数えます。
条件付き書式には使える?
このコードのInterior.Colorが読むのは直接設定した塗りつぶし色です。条件付き書式で表示された色は対象外です。DisplayFormatはワークシートから呼ぶユーザー定義関数では使えないため、単純に置き換えても解決しません。条件付き書式のルールをCOUNTIFSなどの条件式に置き換えて集計してください。
サンプルをダウンロード
この記事のサンプル素材無料ダウンロード · .bas標準モジュール用のVBAソースファイルです。マクロを組み込んだブックではありません。内容を確認してから、ガイドの手順に沿って使ってください。
本記事は旧URLの参照情報をもとに、新たに執筆した解説です。旧サイトの記事本文の復元・転載ではありません。画面や機能はExcelのバージョンによって異なります。