「Excelで色を付けて管理しているけれど、その色がいくつあるか数えたい」
例えば、以下のような管理をしていて、「この色が何件あるのか?」を集計したくなることはありませんか?
- 完了タスクを緑に塗っている
- 未完了は赤にしている
- 保留中は黄色にしている
- 重要度の高いものは青にしている
しかしExcelには、残念ながら塗りつぶしの色を直接数える関数がありません。
そこでこの記事では、Excelで塗りつぶし色をカウントする代表的な方法を紹介し、手軽に実現するコツも解説します。
なぜExcelの関数では塗りつぶし色をカウントできないの?

Excelの標準関数(COUNTIFやSUMIFなど)は、セルの値を基準に計算する仕組みです。
関数が認識できるデータ
カウントできるもの:
- セルに入力された文字列
- 数値
- 日付
- 数式の結果
カウントできないもの:
- 塗りつぶしの色
- フォントの色
- 罫線の種類
- セルのサイズ
例で理解する制限
=COUNTIF(A1:A10, "完了")
この関数は、セルに入力された「完了」という文字は数えられますが、緑色に塗られたセルの数は数えられません。
色情報の技術的な扱い
色の情報は:
- セルの書式設定として保存される
- 表示用の情報として扱われる
- 計算には直接使用できない
これがExcelの標準関数で色をカウントできない理由です。
塗りつぶし色をカウントする主な方法
フィルターで色を絞り込み、件数を確認する
最も簡単で初心者にもおすすめの方法です。
手順:
- データ範囲内のどこかを選択
- 「データ」タブ → 「フィルター」をクリック
- 列の見出しの▼をクリック
- 「色でフィルター」を選び、カウントしたい色を選択
- 画面左下の「○件のレコードが見つかりました」で件数を確認
メリット:
- 操作が簡単
- VBAなどの知識が不要
- 視覚的に分かりやすい
デメリット:
- 手動操作が必要
- 動的な計算には不向き
- 複数の色を同時にカウントできない
SUBTOTAL関数と組み合わせる
フィルター結果を数式として扱いたい場合に使用します。
基本的な使い方:
=SUBTOTAL(103, A1:A100)
手順:
- 上記の方法で色フィルターを設定
- 別のセルにSUBTOTAL関数を入力
- フィルターを変更するたびに自動で件数が更新される
SUBTOTAL関数の引数:
- 103: 表示されている行のカウント
- 109: 表示されている数値の合計
- 104: 表示されている数値の最大値
- 105: 表示されている数値の最小値
活用例:
=SUBTOTAL(103, B2:B100) ' 表示されている行数をカウント
=SUBTOTAL(109, C2:C100) ' 表示されている数値の合計
VBAを使って色を数える
「自動的に色をカウントしたい」という場合は、マクロ(VBA)を使うのが一般的です。
基本的なVBAコード
Function ColorCount(rng As Range, colorCell As Range) As Long
Dim c As Range
Dim cnt As Long
For Each c In rng
If c.Interior.Color = colorCell.Interior.Color Then
cnt = cnt + 1
End If
Next c
ColorCount = cnt
End Function
使用方法:
=ColorCount(A1:A10, B1)
B1の色と同じセルをA1:A10からカウントできます。
より高度なVBAコード
複数色を同時にカウント:
Function MultiColorCount(rng As Range, color1 As Range, color2 As Range) As String
Dim c As Range
Dim cnt1 As Long, cnt2 As Long
For Each c In rng
If c.Interior.Color = color1.Interior.Color Then
cnt1 = cnt1 + 1
ElseIf c.Interior.Color = color2.Interior.Color Then
cnt2 = cnt2 + 1
End If
Next c
MultiColorCount = "色1:" & cnt1 & ", 色2:" & cnt2
End Function
RGB値での指定:
Function ColorCountRGB(rng As Range, r As Integer, g As Integer, b As Integer) As Long
Dim c As Range
Dim cnt As Long
Dim targetColor As Long
targetColor = RGB(r, g, b)
For Each c In rng
If c.Interior.Color = targetColor Then
cnt = cnt + 1
End If
Next c
ColorCountRGB = cnt
End Function
使用例:
=ColorCountRGB(A1:A10, 255, 0, 0) ' 赤色をカウント
よくある質問と解決方法
条件付き書式の色も数えられる?
答え:条件付き書式の色は見た目だけで、実際のセルのプロパティ(Interior.Color)には反映されません。
解決方法:
方法1:条件そのものでカウント
' 条件付き書式の条件が「>100」の場合
=COUNTIF(A1:A10, ">100")
方法2:VBAで条件付き書式を判定
Function ConditionalFormatCount(rng As Range, condition As String) As Long
Dim c As Range
Dim cnt As Long
For Each c In rng
' 条件付き書式の評価ロジックを実装
If Evaluate(c.Address & condition) Then
cnt = cnt + 1
End If
Next c
ConditionalFormatCount = cnt
End Function
色を使わずに管理する方法は?
推奨する代替方法:
方法1:文字列での管理
' A列にステータス、B列に色を設定
=COUNTIF(A:A, "完了")
=COUNTIF(A:A, "未完了")
方法2:数値での管理
' 1:完了、0:未完了
=COUNTIF(A:A, 1) ' 完了数
=COUNTIF(A:A, 0) ' 未完了数
方法3:複合管理
- 値で管理して色は補助的に使用
- 条件付き書式で自動的に色付け
- 集計は値ベースで実行
大量のデータで処理が遅い場合
VBAの高速化:
Function FastColorCount(rng As Range, colorCell As Range) As Long
Dim arr As Variant
Dim i As Long, cnt As Long
Dim targetColor As Long
' 配列に変換して高速化
arr = rng.Value
targetColor = colorCell.Interior.Color
Application.ScreenUpdating = False
For i = 1 To UBound(arr)
If rng.Cells(i).Interior.Color = targetColor Then
cnt = cnt + 1
End If
Next i
Application.ScreenUpdating = True
FastColorCount = cnt
End Function
実務での活用例

プロジェクト管理での活用
タスク管理シート:
- 完了:緑色
- 進行中:黄色
- 未着手:赤色
- 保留:グレー
集計方法:
' フィルターとSUBTOTALを使用
=SUBTOTAL(103, A:A) ' 各色でフィルター後の件数
売上管理での活用
売上目標達成管理:
- 目標達成:青色
- 目標未達成:赤色
- 目標超過:緑色
VBAでの集計:
=ColorCount(B2:B100, E1) ' E1に基準色を設定
在庫管理での活用
在庫ステータス:
- 充足:緑色
- 不足:黄色
- 欠品:赤色
集計ダッシュボード:
充足数: =ColorCount(C2:C1000, F1)
不足数: =ColorCount(C2:C1000, F2)
欠品数: =ColorCount(C2:C1000, F3)
色管理のベストプラクティス
効果的な色の使い方
色の選択基準:
- 直感的: 緑=良い、赤=悪い
- コントラスト: 見やすい色の組み合わせ
- 印刷対応: 白黒印刷でも区別できる
- アクセシビリティ: 色覚に配慮した選択
管理方法の工夫
推奨する管理方法:
- メイン情報は値で管理
A列: ID B列: ステータス(文字列) C列: 優先度(数値)
- 色は補助情報として使用
- 条件付き書式で自動色付け
- 視覚的な分かりやすさを向上
- 集計は値ベースで実行
=COUNTIF(B:B, "完了") =SUMIF(C:C, ">1")
データの整合性を保つ
注意点:
- 手動での色付けは統一性に欠ける
- 条件付き書式を活用して自動化
- 定期的な色とデータの整合性チェック
トラブルシューティング
VBAが動かない場合
確認事項:
- マクロが有効になっているか
- 「ファイル」→「オプション」→「セキュリティセンター」
- 正しい場所にコードが配置されているか
- Alt + F11でVBAエディタを開く
- モジュールに関数を配置
- 関数名と引数が正しいか
- 大文字小文字を確認
- 引数の順序を確認
色が正しく認識されない場合
対処法:
- 色の確認
Debug.Print Selection.Interior.Color
- RGB値での比較
If c.Interior.Color = RGB(255, 0, 0) Then
- 近似色での判定
If Abs(c.Interior.Color - targetColor) < 100 Then
より高度な機能
Power Queryでの色判定
手順:
- 「データ」タブ → 「テーブルから」
- Power Queryエディタで色情報を抽出
- 条件に応じた変換を実行
外部ツールとの連携
VBAでの外部出力:
Sub ExportColorSummary()
Dim ws As Worksheet
Dim summary As String
Set ws = ActiveSheet
summary = "色別集計結果: " & vbCrLf
summary = summary & "赤: " & ColorCount(ws.Range("A:A"), ws.Range("Z1")) & vbCrLf
' テキストファイルに出力
Open "C:\color_summary.txt" For Output As #1
Print #1, summary
Close #1
End Sub
まとめ
Excelには塗りつぶし色を直接カウントする関数はありませんが、以下の方法で集計が可能です:
基本的な方法:
- フィルター: 簡単で直感的
- SUBTOTAL: フィルターとの組み合わせで動的計算
- VBA: 自動化と高度な処理
実務での活用ポイント:
- 色は補助的な情報として使用
- メインデータは値で管理
- 条件付き書式で自動色付け
- 集計は値ベースで実行
効率化のコツ:
- 統一された色使いルールの策定
- 自動化できる部分はVBAで処理
- 定期的なデータ整合性チェック
コメント