Excelで色付きセルだけ合計・カウントする方法|関数で色を取得する裏ワザ(GET.CELL・VBA)

Excelで色付きセルだけ合計・カウントする方法|関数で色を取得する裏ワザGET.CELL・VBA)

「色付きセルだけ合計したいのに、どうしてもできない…」

「Excelってセルの色を関数で取得できないの?」実はその通りです。Excelの標準関数では、セルの色を直接取得することができません。

しかし、GET.CELL関数VBAのユーザー定義関数を使えば、色を数値として取得し、合計・カウント・自動化まで一気に実現できます。「できない」から「できる」に変わる瞬間を、ぜひ今日体験してください。

この記事では、初心者でも迷わず実践できるよう、途中でつまずくポイントまで先回りして丁寧に解説します。

 

 

① まず結論:セルの色を取得すると何ができるの?

色を関数で取得できるようになると、以下の作業が自動化できます。

  • 色付きセルだけを合計・カウント(例:赤いセルの売上だけを集計)
  • 進捗管理表を自動集計(赤=未対応・黄=対応中・緑=完了)
  • 色の種類で行を分類・フィルタリング
  • 色ベースのレポートを関数だけで自動生成

手作業で目視確認していた作業が、数秒で自動完了します。毎日使うレポートなら、月間で5〜10時間の削減になるケースもあります。

 

 

② GET.CELL関数 vs VBA:どっちを使えばいい?

まず全体像を把握しましょう。どちらを使うかで手順が変わります。

方法特徴向いている人
GET.CELL関数マクロ不要・設定が簡単。ただし再計算されない・条件付き書式の色は取れないなど制約ありとりあえず試したい・マクロが苦手な人
VBAユーザー定義関数正確・柔軟・再計算も対応。コードはコピペでOK実務で確実に使いたい人・条件付き書式も扱う人

迷ったらVBAがおすすめです。理由は後述しますが、GET.CELLは便利な反面、実務では”ハマりどころ”が多いためです。

 

 

③ 方法①:GET.CELL関数でセルの色番号を取得する

⚠️ 使う前に知っておくべき3つの注意点

GET.CELLはクセが強い関数です。使う前に以下を必ず確認してください。

  • セルの値が変わっても自動再計算されない(手動でCtrl+Alt+F9が必要)
  • 条件付き書式で付いた色は取得できない(手動で塗った色のみ対応)
  • 非公式の関数のため、将来のExcelバージョンで使えなくなる可能性がある

これらの制約が問題ない場合は、以下の手順で使いましょう。

手順:GET.CELL関数で背景色を取得する

  • ステップ1:「数式」タブをクリックし、「名前の定義」を選択する
  • ステップ2:「名前」欄に GetColor と入力する※名前は何でもOKですが、半角英字で分かりやすいものを推奨します
  • ステップ3:「参照範囲」欄に以下を入力してOKをクリック=GET.CELL(63,INDIRECT("RC",FALSE))

    ※「RC」は「現在のセル」を意味します。そのままコピペでOKです

  • ステップ4:色を調べたいセルの隣の列=GetColor と入力する※必ず「隣のセル」に入力してください。同じセルには入力できません
  • ステップ5:0〜56の色番号が表示されれば成功です

よく使う色番号一覧

  • 0:色なし(白)
  • 3:赤
  • 4:緑
  • 5:青
  • 6:黄色
  • 36:薄い黄色(淡黄)
  • 43:薄い緑

色番号を使ったSUMIF・COUNTIFの例

  • 赤いセル(色番号3)の合計:=SUMIF(B列の色番号範囲, 3, 合計対象範囲)
  • 黄色のセル(色番号6)の個数:=COUNTIF(B列の色番号範囲, 6)

動かないときの確認ポイント

  • 色番号が「0」のまま変わらない → 「Ctrl+Alt+F9」で強制再計算してください
  • 色番号が想定と違う → 56色パレット外の色が使われている可能性があります。その場合はVBAを使用してください
  • エラーが出る → 「参照範囲」の入力ミスの可能性があります。コピペで再入力してください

 

 

④ 方法②:VBAユーザー定義関数で色を正確に取得する(実務推奨)

VBAと聞くと難しく感じるかもしれませんが、今回のコードはそのまま貼り付けるだけでOKです。Excelが壊れることもありませんし、気に入らなければコードを削除するだけで元に戻せます。

手順:VBAで色取得関数を作成する

  • ステップ1:「Alt + F11」でVBAエディター(Microsoft Visual Basic)を開く
  • ステップ2:画面上部メニューの「挿入」→「標準モジュール」をクリックする
  • ステップ3:右側の白いエリア(コード入力欄)に以下のコードをコピペする

' 背景色のカラーコード(10進数)を返す
Function GetBgColor(c As Range) As Long
    Application.Volatile
    GetBgColor = c.Interior.Color
End Function

' 文字色のカラーコード(10進数)を返す
Function GetFontColor(c As Range) As Long
    Application.Volatile
    GetFontColor = c.Font.Color
End Function

' 色別にセルの値を合計する
Function SumByColor(sumRange As Range, colorCell As Range) As Double
    Application.Volatile
    Dim cell As Range
    Dim targetColor As Long
    targetColor = colorCell.Interior.Color
    For Each cell In sumRange
        If cell.Interior.Color = targetColor Then
            SumByColor = SumByColor + cell.Value
        End If
    Next cell
End Function

' 色別にセルの数をカウントする
Function CountByColor(countRange As Range, colorCell As Range) As Long
    Application.Volatile
    Dim cell As Range
    Dim targetColor As Long
    targetColor = colorCell.Interior.Color
    For Each cell In countRange
        If cell.Interior.Color = targetColor Then
            CountByColor = CountByColor + 1
        End If
    Next cell
End Function
  
  • ステップ4:「Alt + F4」でVBAエディターを閉じる
  • ステップ5:ファイルを保存する際に「マクロ有効ブック(.xlsm)」を選択する※.xlsxのまま保存するとコードが消えます。必ず.xlsmで保存してください
  • ステップ6:セルに =GetBgColor(A1) と入力して色コードが表示されれば完成です

SumByColor・CountByColorの使い方

  • 色別合計:=SumByColor(B2:B100, E2)→ E2セルと同じ背景色のセルの値をB2:B100の範囲で合計する
  • 色別カウント:=CountByColor(B2:B100, E2)→ E2セルと同じ背景色のセルをB2:B100の範囲でカウントする

E2に「赤いサンプルセル」を置いておくだけで、赤いセルだけを自動集計するダッシュボードが完成します。

動かないときの確認ポイント(VBA)

  • 「この関数は存在しません」エラー → .xlsmで保存されているか確認してください
  • マクロが無効になっている → 「ファイル」→「オプション」→「セキュリティセンター」→「マクロの設定」で「VBAマクロを有効にする」を選択
  • 色を変えても結果が変わらない → 「Ctrl+Alt+F9」で強制再計算してください(Application.Volatileで自動化済みですが、念のため)

 

⑤ 条件付き書式の色を取得する方法(ここでつまずく人が多い)

条件付き書式で自動的に付いた色は、通常の Interior.Color では取得できません。これは多くの方がハマるポイントです。

Excel 2010以降であれば、DisplayFormat.Interior.Color を使うことで取得できます。


' 条件付き書式を含む表示上の背景色を返す(Excel 2010以降)
Function GetDisplayBgColor(c As Range) As Long
    Application.Volatile
    GetDisplayBgColor = c.DisplayFormat.Interior.Color
End Function
  

この関数を使えば、「期限切れ=赤」などの条件付き書式で付いた色も正確に取得できます。

ただし、DisplayFormat はマクロ内での使用に限られており、Excelのシート上の通常関数としては呼び出せない制約があります。ユーザー定義関数(VBA)経由でのみ動作するという点を覚えておいてください。

 

 

⑥ 応用テクニック:実務で使える3つの活用例

活用例1:進捗管理の自動ダッシュボード

赤=未着手・黄=進行中・緑=完了 の色分け表に CountByColor を適用すれば、進捗率を自動計算するダッシュボードが完成します。毎朝の進捗確認が、開くだけで一目でわかるようになります。

活用例2:色別の売上レポート自動生成

商品カテゴリを色で管理している場合、SumByColor を使えばカテゴリ別売上の合計表が関数だけで自動生成できます。毎月のレポート作成にかかる時間を大幅に短縮できます。

活用例3:RGB値からHEXカラーコードに変換

取得した色コードをWebで使えるHEX形式に変換するコードです。デザイン管理やレポートで色コードを統一したい場合に便利です。


Function GetHexColor(c As Range) As String
    Application.Volatile
    Dim r As Long, g As Long, b As Long
    Dim colorVal As Long
    colorVal = c.Interior.Color
    r = colorVal Mod 256
    g = (colorVal \ 256) Mod 256
    b = (colorVal \ 65536) Mod 256
    GetHexColor = "#" & Right("00" & Hex(r), 2) & Right("00" & Hex(g), 2) & Right("00" & Hex(b), 2)
End Function
  

 

 

⑦ まとめ:今日中に試してほしい理由

最初の設定に数分かかりますが、一度作れば毎日の集計作業がゼロになります。

  • マクロが苦手な方:GET.CELL関数+名前の定義 → 色番号でSUMIF・COUNTIFを活用(ただし制約あり)
  • 実務で確実に使いたい方:VBAユーザー定義関数(コピペで完成)→ 色別集計を完全自動化
  • 条件付き書式の色も扱いたい方:DisplayFormat.Interior.Colorを使ったVBA関数

特に色で管理している進捗表・案件管理表・シフト表を使っている方には、今日中に一度試してみる価値があります。

「こんな方法があったのか!」と思ったら、ぜひ周りの方にも教えてあげてください。きっと喜ばれます。

 

著者
古見遊 正

流通業で働きながら、2004年からWindowsを使い続けている80年代生まれのサラリーマン。ExcelとPowerPointを極め、仕事の効率化を追求中。苦手だったWordも克服中!Excelを使いこなせるだけで周囲から『神扱い』されるけれど、そのせいで『システムに詳しい人』だと勘違いされがち。でも、それが新しい知識を得るきっかけになった。そんな経験を活かして、Excel・PowerPoint・Word・Windowsの時短ワザ&仕事術を発信中!

古見遊 正をフォローする
Excel便利技

コメント

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