メインコンテンツ

【2026年最新】Excel条件付き書式の色をVBAで数えられない原因|DisplayFormatの#VALUE!回避と確実な集計法

【2026年最新】Excel条件付き書式の色をVBAで数えられない原因|DisplayFormatの#VALUE!回避と確実な集計法

「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秒で正確に集計できますよ。

目次
  1. 【2026年最新】Excelの条件付き書式で塗られた色がVBAで「0件」や「#VALUE!」になる原因は?
  2. 【2026年最新】SubマクロとDisplayFormatで条件付き書式の色付きセルを1秒で集計する手順は?
  3. マクロ不要で条件付き書式のセル数と合計を出すCOUNTIF・SUMIF・SUBTOTAL関数の使い方は?
  4. Excelの条件付き書式の色カウントとDisplayFormatでよくある質問(FAQ)は?
  5. Q1. 手動で黄色に塗ったセルの上に、条件付き書式で赤色が重なっている場合、DisplayFormatはどちらの色を返しますか?
  6. Q2. 1万行を超える大きな表でDisplayFormatのループを回すと動作が重いのですが、高速化する方法はありますか?
  7. Q3. 背景色(塗りつぶし)ではなく、条件付き書式で「赤文字(フォント色)」になったセルを数えるにはどう書けばいいですか?

【2026年最新】Excelの条件付き書式で塗られた色がVBAで「0件」や「#VALUE!」になる原因は?

Excel条件付き書式の色が数えられない原因と解決全体像
▲ VBAなら「Subマクロ×DisplayFormat」、関数なら「COUNTIF / SUBTOTAL」で100%正確に集計できます

条件付き書式で塗られたセルが数えられない原因は、通常の Interior.Color が「手動で塗った色」しか返さないため0件になるからです。

さらに表示色を取る DisplayFormat はワークシート関数(UDF)から呼ぶと100% #VALUE! になる仕様となっています。

Microsoft公式ドキュメント(Microsoft Learn:Range.DisplayFormat プロパティ)でも、「DisplayFormat プロパティはユーザー定義関数(UDF)では機能しません」と明記されています。

生成AIに「条件付き書式の色を数える関数を作って」と頼むと、Function の中に DisplayFormat を入れたコードを出力するため、現場で #VALUE! エラーが多発しています。

実機Excelで①B2〜B6に100超で赤色になる条件付き書式を設定し②B3(120)とB5(150)が赤く塗られた画面
▲ 実機STEP 1:①B2:B6に「100より大きい」の条件付き書式を設定し、②B3(120)とB5(150)が赤色に着色された状態
実機Excelで①赤色のB3セルに対し②通常のInterior.Colorでは白(16777215)が返り0件になる比較画面
▲ 実機STEP 2:①画面上は赤色のB3セルでも、②通常のInterior.Colorは白(16777215)を返し「0件」と誤判定します
実機Excelで①自作関数TestCountRed(B3)をセルに入力すると②DisplayFormatのUDF制限により#VALUE!エラーになる画面
▲ 実機STEP 3:①自作関数「=TestCountRed(B3)」をセルに入力すると、②UDF制限により #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 プロシージャから実行すれば再計算ロックに抵触せず、画面に見えている最終的な色を正確に判定できます。

実機Excelで①B2〜B6をSubマクロのDisplayFormatで走査し②C2〜C3に「赤色セル件数: 2 件/合計: 270」を出力した画面
▲ 実機STEP 4:①B2:B6をSubマクロで走査し、②C2:C3へ「赤色セル件数: 2 件/合計: 270」が正確に出力されました
実機Excelで①B4の値を80から200へ変更してSubマクロを再実行し②「赤色セル件数: 3 件/合計: 470」に連動更新された画面
▲ 実機STEP 5:①B4の数値を80から200へ変更して再実行すると、②「赤色セル件数: 3 件/合計: 470」へ連動更新されます
実機ExcelのVBE画面で①B3セルのDisplayFormat.Interior.Colorを取得し②B2〜B6を走査して件数と合計を出力するVBAコード画面
▲ 実機STEP 8:①B3セルのDisplayFormat.Interior.Colorを基準色として取得し、②一致するセルの件数と合計を書き出すVBAマクロ

手元のパソコン実機で「条件付き書式の設定 ➔ Interior.ColorとUDFのエラー確認 ➔ Subマクロによる2件・270の算出 ➔ 数値変更後の3件・470連動 ➔ COUNTIF/SUBTOTAL集計」までを撮影した実機操作動画もご覧ください。

▲ 【実機操作動画】Excel条件付き書式の色をDisplayFormatのSubマクロおよびCOUNTIF・SUBTOTAL関数で集計する手順

  1. キーボードの Alt + F11 を押してVBE画面を開き、上部メニューの[挿入(I)]から[標準モジュール(M)]をクリックします。
  2. 開いた白いコード画面に、すぐ下の「条件付き書式の表示色カウント&合計マクロ」をコピーして貼り付けます。
  3. 上部の緑色の「▶(実行)」ボタンまたは F5 キー を押すと、C2 に 赤色セル件数: 2 件、C3 に 赤色セル合計: 270 が1秒で出力されます。
💻 Excel VBA:条件付き書式の画面表示色(DisplayFormat)から件数と合計を1秒で算出するSubマクロ
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 関数)でも案内されている方法です。

解説メディア(できるネット:条件付き書式で色が付いたセルの数を数える方法)でも推奨されている実務の王道パターンですよ。

実機Excelで①C2〜C3にCOUNTIFとSUMIF関数を入力し②マクロ不要で2件・合計270を自動算出した画面
▲ 実機STEP 6:①「=COUNTIF(B2:B6,”>100″)」と「=SUMIF(B2:B6,”>100″)」なら、②マクロ不要でリアルタイム集計できます
実機Excelで①B列を100超でフィルター抽出し②SUBTOTAL(103)とSUBTOTAL(109)で件数2・合計270を算出した画面
▲ 実機STEP 7:①フィルターで赤色セル(100超)を絞り込み、②SUBTOTAL(103/109)で表示セルの件数2と合計270を算出
  1. 【王道:COUNTIF/SUMIF関数で条件自体を数える(STEP 6)】 集計セルに件数用の =COUNTIF(B2:B6, ">100")、合計用の =SUMIF(B2:B6, ">100") を入力します。数値を書き換えた瞬間にリアルタイムで自動更新されます。
  2. 【即効:色フィルター+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秒特定・解除する実機手順 もあわせてご覧ください。

▼ 【3秒診断】あなたのExcel「条件付き書式の色カウント」最適解チェックリスト
チェック 1 マクロ(.xlsm)を使わずに、シートの数値を書き換えたらリアルタイムで件数・合計を更新したいですか?
■ はい(マクロ不要でリアルタイム自動集計したい)
条件付き書式と同じ条件を入れた「=COUNTIF(B2:B6, “>100”)」や「=SUMIF(B2:B6, “>100”)」を入力してください!エラーゼロで最速です。
□ いいえ(画面上の「見た目通りの色」で集計したい)
すぐ下の「チェック 2」へ進んでください ➔
チェック 2 VBAマクロで一括出力したいですか?それともフィルター操作だけで今すぐ件数を見たいですか?
■ VBAでセルへ件数・合計を書き出したい
Function(自作関数)ではなく、本記事の「Sub CountConditionalColorCells()」をAlt+F11に貼ってF5実行してください!
□ フィルターで絞って今すぐ確認したい
表の外に「=SUBTOTAL(103, B2:B6)」を入れ、オートフィルタの[色フィルター]で赤色を選べば即座に件数が出ます!
【3秒診断】Excel「条件付き書式の色カウント」最適解チャート
▲ 自動再計算なら「COUNTIF / SUMIF」、見た目色判定なら「Subマクロ×DisplayFormat」が最適です

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 に書き換えるだけで、条件付き書式で変わった文字色(赤文字など)を同じ手順でカウント・合計できます。

🔧 Excel「条件付き書式の色カウント&#VALUE!回避」診断&VBAジェネレーター(ブラウザ上で即座に診断&1クリック配布)
現在のシート状況にチェックを入れると、#VALUE!エラーを出さずに条件付き書式の色付きセルを集計する手順とSubマクロが出力されます。
現在の診断ステータス:チェックを入れると最適な復旧ルートと完了率を自動算出します(0 / 3 完了)
📋 条件付き書式の画面表示色(DisplayFormat)から件数と合計を算出するSubマクロ(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

この手順で解決しましたか?

この手順で解決しましたか?

まだ評価が集まっていません。

コメント (任意・500 文字まで)

コメント・質問 (0)

解決できなかった点や追加の質問があれば、こちらにお書きください。

コメント・質問を投稿するには会員登録が必要です。 ログイン または 新規登録 してください(Google アカウントでもご登録いただけます)。

この記事は運営者が実機で検証しています。 AI 利用方針