【EXCEL】色のついたセルの数え方

# やること
　EXCELで、色のついたセルの数え方をメモしておく。


# 事前確認：Qiitaでの記事
　ということで、いきなりですが以下の検索をしたところ、2件ヒットした。(2025/04/22時点)
[「DisplayFormat.Interior.ColorIndex」の検索結果 - Qiita](https://qiita.com/search?q=DisplayFormat.Interior.ColorIndex)
　この2個を紹介。
 
　ちなみに、以下の検索をしたところ、121件ヒットした。(2025/04/22時点)
[「Interior.ColorIndex」の検索結果 - Qiita](https://qiita.com/search?sort=&q=Interior.ColorIndex)
　ここからいくつか紹介。


## チートシート
[【永久保存版】Excel VBA Color 変更 チートシート CRUD 「色付け・色読み取り・リセット」 #crud - Qiita](https://qiita.com/ShortArrow/items/56e16a9aa7e5a5ae8676)
最終更新日 2023年07月19日 投稿日 2019年06月10日
　「塗りつぶし色」、「フォントの色」、「図形の塗りつぶし色」、「図形の枠線色」、「RBGとColorIndexなど」のまとめ。


## リファレンス
[Excel VBA リファレンス 項目リスト #list - Qiita](https://qiita.com/Q11Q/items/23f323a6ed9844b33367)
最終更新日 2019年09月22日　投稿日 2018年10月20日
　英語版からExcelのオブジェクト項目を採取したもの。

## Interior.ColorIndexの検索結果から
[【VBA】クリックしたセルの色を変える方法 #Excel - Qiita](https://qiita.com/RuruVba/items/33fbbe1a299401e0b4eb)
最終更新日 2021年04月09日　投稿日 2021年04月09日
[VBA セル着色　まとめ #Excel - Qiita](https://qiita.com/kushikushi/items/e08c43ff115f7af69837)
最終更新日 2023年04月17日　投稿日 2023年04月17日
[【VBA】セルの塗りつぶしと解除 #VBA - Qiita](https://qiita.com/yasuhiro112358/items/589d21404d8125bd0db9)
最終更新日 2021年04月20日　投稿日 2021年04月19日
[Excel Word PowerPoint VBA 56色カラーパレットの色をRGB分解してリスト化する #Publisher - Qiita](https://qiita.com/Q11Q/items/5e0dac2d8beb6af047f8)
最終更新日 2019年09月22日　投稿日 2019年05月19日
[Excel VBA(マクロ)で一部の文字色を変更するときはフォントを揃えたほうがいい #ExcelVBA - Qiita](https://qiita.com/toyohama/items/806c429a2eaa008ad712)
最終更新日 2022年05月06日　投稿日 2022年05月06日
[【ExcelVBA】爆速カラーリングの戦術メモ #リファクタリング - Qiita](https://qiita.com/YoshitakaOkada/items/25c73d1eb1a87abfa25c)
最終更新日 2018年08月15日　投稿日 2018年08月05日
[EXCEL VBAでカラーのセットをセット #Excel - Qiita](https://qiita.com/jensifloro/items/b99c3359830436f18204)
最終更新日 2017年09月18日　投稿日 2017年09月17日
[ExcelVBA開発時の不可解な挙動と対処法 #Excel - Qiita](https://qiita.com/thakaz/items/113c689ea9e8fed3080b)
最終更新日 2023年01月12日　投稿日 2020年06月11日
[Excel VBA 第7回 文字色、もしくは、取り消し線で検索 #Excel - Qiita](https://qiita.com/Mount/items/9562f3e5346414d49879)
最終更新日 2020年07月12日　投稿日 2020年05月26日
など


# 事例の前に
[【ExcelVBA】条件付き書式はワークシート関数では使えない - 野口香社会保険労務士事務所](https://kn-sharoushi.com/20230301about_displayformat/)
[記事公開]2023.03.01

>条件付き書式の設定されたセルで、表示された色が何色かを把握するにはDisplayFormatを使いますが、DisplayFormatはユーザ定義関数では使えません。

>ワークシート上で＝CountRed(範囲)で呼び出そうとしたらエラーとなった
>なんで？
>
>原因
>理由は、DisplayFormatがユーザ定義関数では機能しないからです。そういう仕様です。
>
>Range.DisplayFormat プロパティ (Excel)
>
>https://learn.microsoft.com/ja-jp/office/vba/api/excel.range.displayformat
>
>↑これを読むと、「 ただし、DisplayFormat は、Visual Basic for Applications (VBA) から呼び出される関数では機能します。 」とありました。確かに、イミディエイトペインでは機能します。


以上。


ではさみしいので。以下事例。


# 事例
```vb:セルA1
=CountColoredCells1(A1:A366,6)
```
A列は「セルの書式設定」で黄色に。
![20250422_231601.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3838258/de34ed0f-c66f-4c09-bf5d-ee368228ed93.jpeg)
```vb:セルB1
=CountColoredCells2(B2:B366, 6)
```
B列は「条件付き書式」で黄色に。
![20250422_231702.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3838258/bf841c25-f117-46c8-9e04-906bf445829d.jpeg)
![20250422_231800.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3838258/cc32f41b-5caa-4034-90b7-9bf86a74449f.jpeg)
セルC1は、マクロCountColoredCellsを実行した結果。(関数名を使いまわしたので)
```vb:
Function CountColoredCells1(rng As Range, colorIndex As Integer) As Integer
'-------------------------------------------------------------------
' 関数: CountColoredCells1
' 説明: 指定した範囲内 (rng) のセルのうち、通常のセル色 (Interior.ColorIndex)
'       が指定した colorIndex と一致するセルの数をカウントして返します。
' 引数:
'   rng        - 対象となるセル範囲 (Range オブジェクト)
'   colorIndex - カウント対象のセル色 (ColorIndex の値、Integer)
' 戻り値:
'   一致するセルの個数 (Integer)
'
' 使用例:　黄色のセルを数える
'   Cell A1に以下を記載
'   =CountColoredCells1(A1:A366,6)
'-------------------------------------------------------------------
    Dim cell As Range
    Dim count As Integer
    count = 0
    Application.Volatile
    For Each cell In rng
        '通常のセル色をチェック
        If cell.Interior.colorIndex = colorIndex Then
            count = count + 1
        End If
    Next cell
    CountColoredCells1 = count
End Function

Function CountColoredCells2(rng As Range, colorIndex As Integer) As Integer
'-------------------------------------------------------------------
' 関数: CountColoredCells2
' 説明: 指定した範囲内 (rng) のセルのうち、条件付き書式の表示上のセル色
'       (DisplayFormat.Interior.ColorIndex) が指定した colorIndex と一致する
'       セルの数をカウントして返します。
' 引数:
'   rng        - 対象となるセル範囲 (Range オブジェクト)
'   colorIndex - カウント対象のセル色 (ColorIndex の値、Integer)
' 戻り値:
'   一致するセルの個数 (Integer)
'
' 使用例:　黄色のセルを数える
'   Dim count As Integer
'   count = CountColoredCells2(Range("B2:B366"), 6)
'-------------------------------------------------------------------
    Dim cell As Range
    Dim count As Integer
    count = 0
    Application.Volatile
    On Error Resume Next
    For Each cell In rng
        '条件付き書式の表示上の色をチェック
        If cell.DisplayFormat.Interior.colorIndex = colorIndex Then
            count = count + 1
        End If
    Next cell
    On Error GoTo 0
    CountColoredCells2 = count
End Function

Sub CountColoredCells()
    Cells(1, 3) = CountColoredCells2(Range("B2:B366"), 6)
End Sub
```
ちなみに、CountColoredCells2の「On Error Resume Next」と「On Error GoTo 0」がないとこんな感じになる。
![20250422_231900.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3838258/4f1ea4e2-faaa-468c-a19f-fb76c9a42513.jpeg)