Excel Magicエクセル術
マクロ・VBA

色付きセルの数を数える

色フィルターとSUBTOTAL、VBAのCountColor関数。目的に合った方法で、塗りつぶしたセルを数えます。

まず、答えから。

一度だけ数えるなら「色フィルター」、結果をセルに残すならVBAのCountColorが便利です。条件付き書式の色は、判定条件をCOUNTIFSで数える方法を優先します。

デスクトップ版 Excel / VBAはWeb版では実行不可

まずは「色」より「条件」で数えられないか確認

たとえば「完了」の行を緑にしているなら、色そのものではなく「完了」という値を数えるほうが管理しやすくなります。A2:A10に作業名、B2:B10に状態がある表なら、次の式で完了件数を求められます。

Excel
=COUNTIFS(B2:B10,"完了")

手動で塗った色だけが判断材料の場合は、次の色フィルターかユーザー定義関数を使います。

マクロを使わず、色フィルターで数える

  1. 見出しを含む表を選択し、[データ]→[フィルター]を選びます。
  2. 色を付けた列の▼を開き、[色フィルター]で対象の塗りつぶし色を選びます。
  3. 表の外に次の式を入力します。A列には、各行に必ず入っている作業名やIDを指定してください。
Excel
=SUBTOTAL(103,A2:A10)

103は、表示されている空白でないセルを数えます。色付きでもA列が空白の行は数えません。数式で空文字列を返すセルは空白扱いにならないため、IDなどの列を使うのが確実です。

CountColorを登録する

  1. Windows版ではAlt + F11でVBEを開き、[挿入]→[標準モジュール]を選びます。Mac版は[ツール]→[マクロ]→[Visual Basic Editor]から開けます。
  2. 次のコードを標準モジュールに貼り付けます。
  3. ブックをExcelマクロ有効ブック(.xlsm)として保存します。マクロは内容を理解したファイルでのみ有効にしてください。
VBA
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を数えたい色で塗ります。結果を表示するセルに次の式を入力してください。

Excel
=CountColor(B2:B10,E2)

この関数は値の有無にかかわらず、塗りつぶし色が同じセルを数えます。E2は必ず目的の色で塗り、範囲はB:Bなどの列全体ではなく必要な行に限定してください。この関数は非表示の行も含めて数えます。

条件付き書式には使える?

このコードのInterior.Colorが読むのは直接設定した塗りつぶし色です。条件付き書式で表示された色は対象外です。DisplayFormatはワークシートから呼ぶユーザー定義関数では使えないため、単純に置き換えても解決しません。条件付き書式のルールをCOUNTIFSなどの条件式に置き換えて集計してください。

サンプルをダウンロード

VBAこの記事のサンプル素材無料ダウンロード · .bas

標準モジュール用のVBAソースファイルです。マクロを組み込んだブックではありません。内容を確認してから、ガイドの手順に沿って使ってください。

本記事は旧URLの参照情報をもとに、新たに執筆した解説です。旧サイトの記事本文の復元・転載ではありません。画面や機能はExcelのバージョンによって異なります。