Excelでセルの塗りつぶし色をカウントする方法|関数だけではできない理由と解決策

Excel

「Excelで色を付けて管理しているけれど、その色がいくつあるか数えたい」

例えば、以下のような管理をしていて、「この色が何件あるのか?」を集計したくなることはありませんか?

  • 完了タスクを緑に塗っている
  • 未完了は赤にしている
  • 保留中は黄色にしている
  • 重要度の高いものは青にしている

しかしExcelには、残念ながら塗りつぶしの色を直接数える関数がありません。

そこでこの記事では、Excelで塗りつぶし色をカウントする代表的な方法を紹介し、手軽に実現するコツも解説します。

スポンサーリンク

なぜExcelの関数では塗りつぶし色をカウントできないの?

Excelの標準関数(COUNTIFやSUMIFなど)は、セルの値を基準に計算する仕組みです。

関数が認識できるデータ

カウントできるもの:

  • セルに入力された文字列
  • 数値
  • 日付
  • 数式の結果

カウントできないもの:

  • 塗りつぶしの色
  • フォントの色
  • 罫線の種類
  • セルのサイズ

例で理解する制限

=COUNTIF(A1:A10, "完了")

この関数は、セルに入力された「完了」という文字は数えられますが、緑色に塗られたセルの数は数えられません。

色情報の技術的な扱い

色の情報は:

  • セルの書式設定として保存される
  • 表示用の情報として扱われる
  • 計算には直接使用できない

これがExcelの標準関数で色をカウントできない理由です。

塗りつぶし色をカウントする主な方法

フィルターで色を絞り込み、件数を確認する

最も簡単で初心者にもおすすめの方法です。

手順:

  1. データ範囲内のどこかを選択
  2. 「データ」タブ → 「フィルター」をクリック
  3. 列の見出しの▼をクリック
  4. 「色でフィルター」を選び、カウントしたい色を選択
  5. 画面左下の「○件のレコードが見つかりました」で件数を確認

メリット:

  • 操作が簡単
  • VBAなどの知識が不要
  • 視覚的に分かりやすい

デメリット:

  • 手動操作が必要
  • 動的な計算には不向き
  • 複数の色を同時にカウントできない

SUBTOTAL関数と組み合わせる

フィルター結果を数式として扱いたい場合に使用します。

基本的な使い方:

=SUBTOTAL(103, A1:A100)

手順:

  1. 上記の方法で色フィルターを設定
  2. 別のセルにSUBTOTAL関数を入力
  3. フィルターを変更するたびに自動で件数が更新される

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)

色管理のベストプラクティス

効果的な色の使い方

色の選択基準:

  • 直感的: 緑=良い、赤=悪い
  • コントラスト: 見やすい色の組み合わせ
  • 印刷対応: 白黒印刷でも区別できる
  • アクセシビリティ: 色覚に配慮した選択

管理方法の工夫

推奨する管理方法:

  1. メイン情報は値で管理 A列: ID B列: ステータス(文字列) C列: 優先度(数値)
  2. 色は補助情報として使用
    • 条件付き書式で自動色付け
    • 視覚的な分かりやすさを向上
  3. 集計は値ベースで実行 =COUNTIF(B:B, "完了") =SUMIF(C:C, ">1")

データの整合性を保つ

注意点:

  • 手動での色付けは統一性に欠ける
  • 条件付き書式を活用して自動化
  • 定期的な色とデータの整合性チェック

トラブルシューティング

VBAが動かない場合

確認事項:

  1. マクロが有効になっているか
    • 「ファイル」→「オプション」→「セキュリティセンター」
  2. 正しい場所にコードが配置されているか
    • Alt + F11でVBAエディタを開く
    • モジュールに関数を配置
  3. 関数名と引数が正しいか
    • 大文字小文字を確認
    • 引数の順序を確認

色が正しく認識されない場合

対処法:

  1. 色の確認 Debug.Print Selection.Interior.Color
  2. RGB値での比較 If c.Interior.Color = RGB(255, 0, 0) Then
  3. 近似色での判定 If Abs(c.Interior.Color - targetColor) < 100 Then

より高度な機能

Power Queryでの色判定

手順:

  1. 「データ」タブ → 「テーブルから」
  2. Power Queryエディタで色情報を抽出
  3. 条件に応じた変換を実行

外部ツールとの連携

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で処理
  • 定期的なデータ整合性チェック

コメント

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