
「色付きセルだけ合計したいのに、どうしてもできない…」
しかし、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関数
特に色で管理している進捗表・案件管理表・シフト表を使っている方には、今日中に一度試してみる価値があります。
「こんな方法があったのか!」と思ったら、ぜひ周りの方にも教えてあげてください。きっと喜ばれます。












コメント