条件付き書式は「値に応じて自動で色や書式を変え、異常値や重要データを一瞬で見分ける」ための武器
条件付き書式は、
「セルの値に応じて、自動で色・フォント・アイコンなどを変える仕組み」です。
人間が目でチェックしなくても、
Pythonで条件付き書式を仕込んでおけば、
Excelを開いた瞬間に「どこが重要か」「どこが危険か」が一目でわかるようになります。
Pythonでは openpyxl の formatting 機能を使って、
Excelと同じような条件付き書式を設定できます。
ここでは、よく使うパターンを
「数値条件」「文字列条件」「数式条件」に分けて解説します。
基本:CellIsRule を使った「値に応じた色付け」
ある値以上・以下で色を変える(最もよく使うパターン)
from openpyxl import load_workbook
from openpyxl.formatting.rule import CellIsRule
from openpyxl.styles import PatternFill
wb = load_workbook("sample.xlsx")
ws = wb["Sheet1"]
red_fill = PatternFill(fill_type="solid", fgColor="FFCCCC")
ws.conditional_formatting.add(
"C2:C100",
CellIsRule(operator="greaterThan", formula=["1000"], fill=red_fill)
)
wb.save("sample.xlsx")
Pythonここが重要(深掘り)
"C2:C100"が条件付き書式をかける範囲operator="greaterThan"は「より大きい」
他に"lessThan","between","equal"などがあるformula=["1000"]は「セルの値と比較する値」fill=red_fillで「条件を満たしたセルの背景色」を指定
Excelで「セルの値が 1000 より大きい場合、赤くする」と
ダイアログで設定しているのと同じことを、Pythonで書いているイメージです。
文字列条件での条件付き書式(ステータスやフラグに色を付ける)
文字列が一致したら色を変える
from openpyxl.formatting.rule import CellIsRule
from openpyxl.styles import PatternFill
green_fill = PatternFill(fill_type="solid", fgColor="CCFFCC")
ws.conditional_formatting.add(
"D2:D100",
CellIsRule(operator="equal", formula=['"完了"'], fill=green_fill)
)
Pythonここが重要(深掘り)
- 文字列の場合、
formula=['"完了"']のように ダブルクォーテーションで囲む 必要がある - Excelの数式欄に
="完了"と書くイメージ - ステータス管理(完了/未完了、OK/NG)で非常によく使う
数式を使った条件付き書式(柔軟度が一気に上がる)
FormulaRule を使って「行全体」を条件付き書式にする
from openpyxl.formatting.rule import FormulaRule
from openpyxl.styles import PatternFill
yellow_fill = PatternFill(fill_type="solid", fgColor="FFFFCC")
ws.conditional_formatting.add(
"A2:E100",
FormulaRule(formula=["$D2=\"要確認\""], fill=yellow_fill)
)
Pythonここが重要(深掘り)
FormulaRuleは「Excelの数式そのもの」を条件に使える"$D2=\"要確認\""は
「D列の値が『要確認』なら true」 という意味- 範囲
"A2:E100"に対してこのルールをかけているので、
D列の値に応じて「行全体」が色付けされる
これは実務でめちゃくちゃ使えます。
「ステータスが要確認の行だけ、行全体を黄色にする」
といった視認性の高いシートが自動で作れます。
複数条件を組み合わせる(ルールを何個も追加できる)
例:
C列が 1000 以上なら赤、
500 未満なら青、
のように複数ルールを重ねることもできます。
from openpyxl.formatting.rule import CellIsRule
from openpyxl.styles import PatternFill
red_fill = PatternFill(fill_type="solid", fgColor="FFCCCC")
blue_fill = PatternFill(fill_type="solid", fgColor="CCCCFF")
ws.conditional_formatting.add(
"C2:C100",
CellIsRule(operator="greaterThanOrEqual", formula=["1000"], fill=red_fill)
)
ws.conditional_formatting.add(
"C2:C100",
CellIsRule(operator="lessThan", formula=["500"], fill=blue_fill)
)
Pythonここが重要(深掘り)
conditional_formatting.add()は何度でも呼べる- つまり「ルールを何個も重ねられる」
- Excelの「条件付き書式ルールの管理」と同じイメージ
例題①:売上が目標未達の行を赤くする
シナリオ
C列が「売上」、D列が「目標」、
売上 < 目標 の行を赤くしたい。
from openpyxl.formatting.rule import FormulaRule
from openpyxl.styles import PatternFill
red_fill = PatternFill(fill_type="solid", fgColor="FFCCCC")
ws.conditional_formatting.add(
"A2:E100",
FormulaRule(formula=["$C2<$D2"], fill=red_fill)
)
wb.save("sales_cf.xlsx")
Python解説
"$C2<$D2"という数式が true になった行だけ色が付く- 範囲は
"A2:E100"なので、行全体が赤くなる - 「目標未達の行を一瞬で見分ける」レポートが自動で作れる
例題②:今日より前の日付をグレーにする(期限切れの可視化)
シナリオ
A列に期限日が入っているとする。
from openpyxl.formatting.rule import FormulaRule
from openpyxl.styles import PatternFill
gray_fill = PatternFill(fill_type="solid", fgColor="DDDDDD")
ws.conditional_formatting.add(
"A2:A100",
FormulaRule(formula=["A2<TODAY()"], fill=gray_fill)
)
wb.save("tasks_cf.xlsx")
Python解説
- Excelの数式
=A2<TODAY()をそのまま使っているイメージ - 「期限切れのタスク」を自動でグレーアウトできる
- 期限管理のシートでかなり使えるパターン
例題③:上位3件だけを強調表示する(ランキング可視化)
openpyxlには「トップ10」などのルールを扱う Top10Rule もあります。
from openpyxl.formatting.rule import Top10Rule
from openpyxl.styles import PatternFill
green_fill = PatternFill(fill_type="solid", fgColor="CCFFCC")
ws.conditional_formatting.add(
"C2:C100",
Top10Rule(rank=3, percent=False, fill=green_fill)
)
wb.save("rank_cf.xlsx")
Python解説
Top10Rule(rank=3)で「上位3件」percent=Falseなので「件数ベース」- 売上トップ3、スコア上位3などを一瞬で強調できる
条件付き書式を設計するときの考え方
条件付き書式は「見た目の自動判定ロジック」です。
だからこそ、次のように考えると設計しやすくなります。
- どの範囲に対して
- どんな条件(数値・文字列・数式)で
- どんな見た目(色・フォント・罫線など)にしたいか
そして、コードに落とすときはだいたいこの3パターンです。
- 単純な比較 →
CellIsRule - 行全体や複雑な条件 →
FormulaRule - ランキング系 →
Top10Rule
