セルに色がついていたら ifで判定できる?

Excelで「このセルに色がついていたら〇、ついていなければ×」と表示させたい。そう思ってIF関数を書こうとして、条件の書き方が分からず手が止まった経験はありませんか。

実は、ExcelのIF関数には「セルの塗りつぶし色」を条件にする機能がありません。この記事では、その理由と、色付きセルを判定・集計するための現実的な方法を、難易度別にまとめました。

この記事でわかること
  • IF関数だけで「セルに色がついていたら」を判定できない理由
  • GET.CELL・VBA・色フィルターなど、色を判定する4つの方法
  • そもそも色で管理しないほうがよいケースと、条件付き書式の活用法
筆者

色で管理している表って、職場に結構ありますよね。でも色は「見た目」なので、関数からは扱いにくいんです。仕組みを知っておくと、遠回りしなくて済みますよ。

目次

セルに色がついていたらIF関数で判定できる?

結論からいうと、IF関数だけでは、セルの塗りつぶし色を判定することはできません。

IF関数が条件にできるのは、セルの「値」(数値・文字列・日付など)や、ほかの関数が返す結果です。塗りつぶしの色はセルの「書式」にあたるため、通常のワークシート関数では読み取れないのです。

CELL関数の「color」は塗りつぶし色ではない

セルの情報を返すCELL関数には「color」という検査の種類がありますが、これは塗りつぶし色を調べるものではありません。MicrosoftのCELL関数の解説では、「color」は負の数を色で表す書式がセルに設定されている場合に1を返すものだと説明されています。

やりたいことCELL(“color”)で判定できる?
セルが黄色で塗りつぶされているかできない
マイナスの数値が赤字で表示される書式かできる

「color」という名前から勘違いしやすいポイントなので、注意しましょう。

筆者

私も昔、CELL関数でいけると思って30分くらい悩んだことがあります。名前に惑わされないでくださいね。

セルに色がついていたらを判定する4つの方法

IF関数単体ではできませんが、ほかの機能と組み合わせれば、色付きセルを判定したり集計したりすることは可能です。

方法難易度向いている場面
色フィルターで抽出するやさしい色付きの行だけを見たい・数えたい
検索と置換で書式検索するやさしい色付きセルの数を一度だけ確認したい
GET.CELLを使うふつう関数で〇×を表示したい(マクロ有効ブックで保存できる)
VBAでユーザー定義関数を作るやや難しい色の判定を何度も繰り返し使いたい

方法1:色フィルターで色付きセルだけを抽出する

関数を使わずに済ませたいなら、フィルター機能がいちばん手軽です。

  1. 表の見出し行を選択し、「データ」タブの「フィルター」をクリック
  2. 色が付いている列の見出しにある▼をクリック
  3. 「色フィルター」から、抽出したい塗りつぶしの色を選ぶ

詳しい手順は、Microsoftのフォントの色、セルの色、またはアイコン セットで抽出するでも解説されています。

抽出した状態でSUBTOTAL関数を使えば、表示されている(色付きの)セルだけを数えたり合計したりできます。

=SUBTOTAL(103,A2:A100)

「103」は「非表示の行を除いてデータの個数を数える」という意味です。合計したい場合は「109」を使います。

方法2:検索と置換で色付きセルの数を数える

1回だけ数を確認したいなら、検索機能でも数えられます。

  1. Ctrl+Fで「検索と置換」を開く
  2. 「オプション」→「書式」→「塗りつぶし」で探したい色を選ぶ
  3. 「すべて検索」をクリック

ダイアログの下部に「〇セルが見つかりました」と件数が表示されます。

方法3:GET.CELLで色を判定してIF関数につなげる

「関数で〇×を表示したい」という場合に使えるのが、GET.CELLという古いマクロ関数です。シートに直接は入力できないため、「名前の定義」を経由して使います。

  1. 判定結果を表示したいセル(例:B2)を選択する
  2. 「数式」タブ →「名前の定義」をクリック
  3. 名前に「塗り色」と入力し、参照範囲に次の式を入力する
=GET.CELL(63,Sheet1!A2)
  1. B2に次の式を入力して、下までコピーする
=IF(塗り色<>0,"色あり","色なし")

GET.CELLの「63」はセルの塗りつぶし色の番号を返す指定で、色がない場合は0になります。

ただし、次の点に注意が必要です。

  • ブックは「Excelマクロ有効ブック(.xlsm)」で保存する必要がある
  • 色を変えただけでは自動で再計算されないため、F9キーなどで再計算する
  • 会社のセキュリティ設定によっては、マクロが無効化されて動かないことがある

方法4:VBAでユーザー定義関数を作る

色の判定を頻繁に使うなら、VBAで自分専用の関数を作る方法もあります。

  1. Alt+F11でVBAエディターを開く
  2. 「挿入」→「標準モジュール」を選ぶ
  3. 次のコードを貼り付ける
Function 色あり(target As Range) As Boolean
    Application.Volatile
    色あり = (target.Interior.ColorIndex <> xlColorIndexNone)
End Function
  1. シートに戻り、次のように入力する
=IF(色あり(A2),"〇","×")

こちらも.xlsm形式で保存する必要があります。

筆者

GET.CELLもVBAも、社内で共有するファイルだと「マクロが動かない」と言われがちです。使う前に、職場のルールを確認しておくと安心ですよ。

条件付き書式の色はIF関数で判定できない点に注意

ここまでの方法で判定できるのは、手作業で塗りつぶした色です。条件付き書式で自動的についた色は、GET.CELLやVBAの通常の方法では読み取れません。

ただし、条件付き書式の色は「何かの条件」によってついているはずです。その場合は、色を判定するのではなく、色をつけている条件そのものをIF関数に入れるのが正解です。

条件付き書式の設定例IF関数での書き方
売上が10万円未満なら赤=IF(B2<100000,”要確認”,”OK”)
期限が今日より前なら黄色=IF(C2<TODAY(),”期限切れ”,””)
「済」と入力されたらグレー=IF(D2=”済”,”完了”,”未完了”)

そもそも「色で管理」をやめるのが一番の近道

色で状態を管理している表は、見た目は分かりやすい一方で、次のような弱点があります。

  • 関数で集計しにくい
  • 人によって色の使い方がバラバラになる
  • 印刷やPDF化で色の違いが分かりにくくなる

おすすめは、「状態」列を1つ追加して「済」「未」「保留」のように文字で入力し、その列をもとに条件付き書式で色をつける方法です。こうすれば、色は見た目のため、文字は集計のため、と役割を分けられます。

筆者

「色をつける前に文字を入れる」。これだけで、あとから集計で困ることがほとんどなくなりますよ。

セルに色がついていたらIF関数で判定したいときのよくある質問

Googleスプレッドシートなら色で判定できる?

Googleスプレッドシートでも、標準の関数でセルの背景色を条件にすることはできません。Google Apps Scriptを使えば判定できますが、Excelと同様に、文字で状態を管理する方法のほうが扱いやすいでしょう。

文字の色(フォント色)で判定することはできる?

塗りつぶし色と同じく、IF関数だけでは判定できません。色フィルターの「フォントの色で抽出」や、GET.CELL(フォント色は「24」を指定)を使う方法があります。

色付きセルの合計を出したい

色フィルターで抽出したあと、SUBTOTAL関数の「109」で合計するのが一番手軽です。

まとめ:セルに色がついていたらIF関数だけでは判定できない

ExcelのIF関数は、セルの塗りつぶし色を直接条件にすることはできません。

  • CELL関数の「color」は塗りつぶし色ではなく、負の数の色書式を判定するもの
  • 抽出や集計だけなら、色フィルター+SUBTOTAL関数が手軽
  • 関数で〇×を出したいなら、GET.CELLやVBAを使う(.xlsmで保存)
  • 条件付き書式の色は、色をつけている条件をそのままIF関数に使う

今後のことを考えるなら、色ではなく文字で状態を管理する表に作り替えるのもおすすめです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次