Python 業務自動化 | Excel業務自動化:Excel基本操作 - 条件付き書式

Python Python
スポンサーリンク

条件付き書式は「値に応じて自動で色や書式を変え、異常値や重要データを一瞬で見分ける」ための武器

条件付き書式は、
「セルの値に応じて、自動で色・フォント・アイコンなどを変える仕組み」です。

人間が目でチェックしなくても、
Pythonで条件付き書式を仕込んでおけば、
Excelを開いた瞬間に「どこが重要か」「どこが危険か」が一目でわかるようになります。

Pythonでは openpyxlformatting 機能を使って、
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

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