「Excelの条件付き書式で赤色に塗られたセルの個数を数えたくて、ネットで見つけた色カウントVBAを入れたのに『0件』としか出ない!」と困っていませんか?
「DisplayFormat.Interior.Color に書き換えたら、今度はセルに #VALUE! エラー が出て計算できなくなった…」という相談も実務で非常に多く寄せられます。
結論から言うと、条件付き書式で着いた色は通常の Interior.Color には入らないため0件になります。
さらに画面の表示色を取る DisplayFormat プロパティはExcelの仕様上「ワークシート関数(Function)」の中では使用禁止(100% #VALUE! エラー) です。
- VBAで条件付き書式の画面表示色そのものを数えたい時は、自作関数(
Function)ではなくSubプロシージャ内でcell.DisplayFormat.Interior.Colorを走査してセルへ結果を書き出す - マクロを使わずリアルタイムに自動集計したい時は、色ではなく条件式そのものを
=COUNTIF(B2:B6, ">100")や=SUMIF(B2:B6, ">100")で数える - 今すぐ手作業で色付きセルの件数だけ確認したい時は、オートフィルタの[色フィルター]と
=SUBTOTAL(103, B2:B6)を組み合わせる
手元のパソコン実機(Windows 11 Pro 24H2 ビルド 26100.9711 / Microsoft Excel 2021)で実際に条件付き書式の売上表を作成して検証しました。
現場で多発する2大エラーの再現から、確実に集計できる3つの解決手順までを分かりやすくまとめています。
大きく拡大した実機写真の「赤丸番号(①・②)」とコピペ用コード通りに操作するだけで、条件付き書式の色付きセルを1秒で正確に集計できますよ。
目次
- 【2026年最新】Excelの条件付き書式で塗られた色がVBAで「0件」や「#VALUE!」になる原因は?
- 【2026年最新】SubマクロとDisplayFormatで条件付き書式の色付きセルを1秒で集計する手順は?
- マクロ不要で条件付き書式のセル数と合計を出すCOUNTIF・SUMIF・SUBTOTAL関数の使い方は?
- Excelの条件付き書式の色カウントとDisplayFormatでよくある質問(FAQ)は?
- Q1. 手動で黄色に塗ったセルの上に、条件付き書式で赤色が重なっている場合、DisplayFormatはどちらの色を返しますか?
- Q2. 1万行を超える大きな表でDisplayFormatのループを回すと動作が重いのですが、高速化する方法はありますか?
- Q3. 背景色(塗りつぶし)ではなく、条件付き書式で「赤文字(フォント色)」になったセルを数えるにはどう書けばいいですか?
【2026年最新】Excelの条件付き書式で塗られた色がVBAで「0件」や「#VALUE!」になる原因は?

条件付き書式で塗られたセルが数えられない原因は、通常の Interior.Color が「手動で塗った色」しか返さないため0件になるからです。
さらに表示色を取る DisplayFormat はワークシート関数(UDF)から呼ぶと100% #VALUE! になる仕様となっています。
Microsoft公式ドキュメント(Microsoft Learn:Range.DisplayFormat プロパティ)でも、「DisplayFormat プロパティはユーザー定義関数(UDF)では機能しません」と明記されています。
生成AIに「条件付き書式の色を数える関数を作って」と頼むと、Function の中に DisplayFormat を入れたコードを出力するため、現場で #VALUE! エラーが多発しています。



上の実機画面(STEP 1〜STEP 3)の通り、セル内の関数として DisplayFormat を呼び出すことはExcelの設計上できません。
| 使用する手法・プロパティ | 手動で塗った色 | 条件付き書式の色 | セル内の自作関数(UDF)での動作 |
|---|---|---|---|
| ① cell.Interior.Color | ◎ 取得できる | × 取得不可(白 16777215 が返り0件) | ○ エラーは出ないが条件付き書式は0件 |
| ② cell.DisplayFormat.Interior.Color(Function内) | × エラー | × エラー | × 100%「#VALUE!」エラーで即死する |
| ③ cell.DisplayFormat.Interior.Color(Subマクロ内) | ◎ 取得できる | ◎ 画面通りの赤色(13551615)を取得可能 | ◎ ボタンやF5実行でセルへ正確に出力 |
【2026年最新】SubマクロとDisplayFormatで条件付き書式の色付きセルを1秒で集計する手順は?
#VALUE! エラーを回避して条件付き書式の色をVBAで数えるには、ワークシート関数(Function)ではなく通常の Sub マクロとして cell.DisplayFormat.Interior.Color を走査し、集計結果をセルへ書き出します。
所要1秒で件数と合計金額の両方を100%正確に算出できます。
専門解説サイト(Excelの真髄:条件付き書式の色を取得する方法)の通り、Sub プロシージャから実行すれば再計算ロックに抵触せず、画面に見えている最終的な色を正確に判定できます。



手元のパソコン実機で「条件付き書式の設定 ➔ Interior.ColorとUDFのエラー確認 ➔ Subマクロによる2件・270の算出 ➔ 数値変更後の3件・470連動 ➔ COUNTIF/SUBTOTAL集計」までを撮影した実機操作動画もご覧ください。
▲ 【実機操作動画】Excel条件付き書式の色をDisplayFormatのSubマクロおよびCOUNTIF・SUBTOTAL関数で集計する手順
- キーボードの
Alt + F11を押してVBE画面を開き、上部メニューの[挿入(I)]から[標準モジュール(M)]をクリックします。 - 開いた白いコード画面に、すぐ下の「条件付き書式の表示色カウント&合計マクロ」をコピーして貼り付けます。
- 上部の緑色の「▶(実行)」ボタンまたは
F5キー を押すと、C2に 赤色セル件数: 2 件、C3に 赤色セル合計: 270 が1秒で出力されます。
Public Sub CountConditionalColorCells()
Dim ws As Worksheet, cell As Range
Dim targetColor As Long, matchCount As Long, matchSum As Double
Set ws = ActiveSheet
' B3セル(条件付き書式で赤色になっているセル)の表示色を基準色として取得
targetColor = ws.Range("B3").DisplayFormat.Interior.Color
matchCount = 0
matchSum = 0
For Each cell In ws.Range("B2:B6")
If cell.DisplayFormat.Interior.Color = targetColor Then
matchCount = matchCount + 1
If IsNumeric(cell.Value) Then matchSum = matchSum + cell.Value
End If
Next cell
ws.Range("C2").Value = "赤色セル件数: " & matchCount & " 件"
ws.Range("C3").Value = "赤色セル合計: " & matchSum
MsgBox "集計完了: 赤色セルは " & matchCount & " 件(合計 " & matchSum & ")です。", vbInformation
End Sub| Subマクロ実行前後の確認項目 | 修正前(Function関数・Interior) | 修正後(Subマクロ×DisplayFormat) |
|---|---|---|
| 1. 赤色セルの検出件数 | 0件 または #VALUE! エラーで停止 | 赤色セル 2件(数値変更後は 3件)を正確検出 |
| 2. 赤色セルの数値合計 | 算出不可(エラー停止) | 合計 270(数値変更後は 470)を1秒で同時出力 |
| 3. 実行方法と再計算負荷 | セル再計算のたびにUDFエラーが発生 | F5キーまたはボタン押下時のみ1秒で高速実行 |
また、シート内のリンクや青文字書式を一括でリセットするVBA手順もあわせて確認しておくと便利です。
詳しくは 【2026年最新】ExcelでURLやメアドが勝手にハイパーリンク化するのを止める設定と青文字下線を残さない一括解除法 をご覧ください。
マクロ不要で条件付き書式のセル数と合計を出すCOUNTIF・SUMIF・SUBTOTAL関数の使い方は?
マクロを使わずに条件付き書式で赤くなったセルをリアルタイム集計するには、「色」ではなく「赤色になる条件(例:>100)」をそのまま =COUNTIF(B2:B6, ">100") や =SUMIF(B2:B6, ">100") に入力します。
また、オートフィルタの[色フィルター]と =SUBTOTAL(103, B2:B6) を使えば手作業でも3秒でカウントできます。
Microsoft公式サポート(COUNTIF 関数・SUBTOTAL 関数)でも案内されている方法です。
解説メディア(できるネット:条件付き書式で色が付いたセルの数を数える方法)でも推奨されている実務の王道パターンですよ。


- 【王道:COUNTIF/SUMIF関数で条件自体を数える(STEP 6)】 集計セルに件数用の
=COUNTIF(B2:B6, ">100")、合計用の=SUMIF(B2:B6, ">100")を入力します。数値を書き換えた瞬間にリアルタイムで自動更新されます。 - 【即効:色フィルター+SUBTOTAL関数で絞り込み集計(STEP 7)】 表の外側に件数用の
=SUBTOTAL(103, B2:B6)(合計なら=SUBTOTAL(109, B2:B6))を入れ、オートフィルタの[色フィルター]から赤色を選べばその場で件数と合計が表示されます。
| 集計アプローチ | 使う関数・機能 | 最も向いている実務シーン |
|---|---|---|
| ① 条件ロジック集計(一番おすすめ) | COUNTIF / COUNTIFS / SUMIF | 数値を変えた瞬間に自動再計算したい時・1万行以上の大きな表を高速集計したい時 |
| ② Subマクロ表示色スキャン | Sub + DisplayFormat.Interior.Color | 複数の条件付き書式と手動塗りが混在しており、「とにかく今赤く見えるセル」を数えたい時 |
| ③ 色フィルター絞り込み集計 | 色フィルター + SUBTOTAL(103, 範囲) | 数式やマクロを組まず、今すぐ画面上で赤色セルの件数・合計を確認したい時 |
数式を変更しようとした際に「配列の一部を変更することはできません」と出る時の解除手順は 【2026年最新】Excel「配列の一部を変更することはできません」の消し方|Ctrl+スラッシュで範囲を1秒特定・解除する実機手順 もあわせてご覧ください。

Excelの条件付き書式の色カウントとDisplayFormatでよくある質問(FAQ)は?
Excelの条件付き書式の色集計に関してよく寄せられる質問3件について、手動塗りとの優先順位や大量行での速度低下対策、赤文字(フォント色)を数える方法を回答します。
Q1. 手動で黄色に塗ったセルの上に、条件付き書式で赤色が重なっている場合、DisplayFormatはどちらの色を返しますか?
Excelの画面表示では「手動の塗りつぶし」よりも「条件付き書式」が優先して前面に描画されるため、cell.DisplayFormat.Interior.Color は画面に見えている通りの「赤色」を返します。
一方、cell.Interior.Color は裏に隠れている手動設定の「黄色」を返すため、見た目通りの色を判定したい時は必ず DisplayFormat を使ってください。
Q2. 1万行を超える大きな表でDisplayFormatのループを回すと動作が重いのですが、高速化する方法はありますか?
DisplayFormat は1セルごとにExcelの画面描画エンジンへ問い合わせを行うため、1万行以上の全セルループを回すと数秒〜十数秒の待ち時間が発生します。
行数が多い大規模シートでは、ループの前に Application.ScreenUpdating = False を入れるか、そもそもVBAループを使わず =COUNTIFS(...) 関数で条件ロジックを直接集計する設計 に切り替えるのが最も高速です。
Q3. 背景色(塗りつぶし)ではなく、条件付き書式で「赤文字(フォント色)」になったセルを数えるにはどう書けばいいですか?
本記事のVBAマクロ内の DisplayFormat.Interior.Color の部分を、DisplayFormat.Font.Color に書き換えるだけで、条件付き書式で変わった文字色(赤文字など)を同じ手順でカウント・合計できます。
Public Sub CountConditionalColorCells()
Dim ws As Worksheet, cell As Range
Dim targetColor As Long, matchCount As Long, matchSum As Double
Set ws = ActiveSheet
' B3セル(条件付き書式で赤色になっているセル)の表示色を基準色として取得
targetColor = ws.Range("B3").DisplayFormat.Interior.Color
matchCount = 0
matchSum = 0
For Each cell In ws.Range("B2:B6")
If cell.DisplayFormat.Interior.Color = targetColor Then
matchCount = matchCount + 1
If IsNumeric(cell.Value) Then matchSum = matchSum + cell.Value
End If
Next cell
ws.Range("C2").Value = "赤色セル件数: " & matchCount & " 件"
ws.Range("C3").Value = "赤色セル合計: " & matchSum
MsgBox "集計完了: 赤色セルは " & matchCount & " 件(合計 " & matchSum & ")です。", vbInformation
End Sub
この手順で解決しましたか?
この手順で解決しましたか?
まだ評価が集まっていません。
コメント (任意・500 文字まで)