PythonとopenpyxlでExcelレポートの自動生成はできたけど、出力されるのはただ数字が並んだだけの、少し味気ないファイル…。もっと一目で状況がわかるような、視覚的に訴えるレポートを作れたら、と思いませんか?
実はopenpyxlには、Excelの強力な「条件付き書式」を操るConditionalFormattingという機能があり、これを使えばデータの可視化まで含めたレポート作成の完全自動化が可能です。
この記事では、特にインパクトの大きい**「ColorScale(カラースケール)」と「DataBar(データバー)」**に焦点を当て、あなたのExcelレポートを劇的に見やすくするConditionalFormattingの活用術を解説します。
はじめに:データだけのExcelはもう卒業!
数値データが羅列されただけのExcelは、どこが重要で、どの数値に注意すべきかを読み解くのに時間がかかります。ConditionalFormattingは、そうした課題を解決するための機能です。
この記事を読めば、あなたのExcelレポートが変わる
- 数値の大小を**色の濃淡(グラデーション)**で表現できるようになる (ColorScale)
- 各セルの数値を棒グラフの長さで直感的に示せるようになる (DataBar)
- Pythonプログラムから出力した時点で、すでに分析しやすい状態のExcelが手に入る
ConditionalFormatting(条件付き書式)とは?
セルの値が特定の条件を満たしたときに、背景色やフォント、アイコンなどを自動で適用するExcelの標準機能です。openpyxlでは、この一連の機能をプログラムからオブジェクトとして設定できます。
まずは基本!特定のセルに色を付ける方法
高度な可視化に入る前に、最も基本となる「特定の条件を満たしたセルに色を付ける」方法を確認しておきましょう。これが全ての基本形となります。
条件付き書式の3ステップ(書式→ルール→追加)
- 書式オブジェクトの作成: 条件に合致したときに適用したいセルのスタイル(塗りつぶし色など)を定義します。
- ルールオブジェクトの作成: どんな条件のときに発動するかを定義し、書式と紐づけます。
- ワークシートへの追加: 作成したルールを、対象のセル範囲に適用します。
コード例:売上目標未達のセルをハイライトする
ここでは、売上が100万円未満のセルを薄い赤色で塗りつぶしてみます。
import openpyxl
from openpyxl.styles import PatternFill
from openpyxl.formatting.rule import CellIsRule
wb = openpyxl.Workbook()
ws = wb.active
# サンプルデータ
data = {'A店': 120, 'B店': 85, 'C店': 98, 'D店': 150}
for i, (store, sales) in enumerate(data.items(), 1):
ws[f'A{i}'] = store
ws[f'B{i}'] = sales
# 1. 書式を定義 (薄い赤色の塗りつぶし)
fill = PatternFill(start_color="FFC7CE", end_color="FFC7CE", fill_type="solid")
# 2. ルールを定義 (100より小さい場合)
rule = CellIsRule(operator='lessThan', formula=[100], fill=fill)
# 3. ワークシートのB1:B4にルールを追加
ws.conditional_formatting.add('B1:B4', rule)
wb.save("highlight_sample.xlsx")【活用術①】ColorScaleでデータの温度感を表現する
ここからが本番です。ColorScale(カラースケール)は、数値の大小を色のグラデーションで表現する機能で、データの「温度感」や分布を一目で把握するのに最適です。
ColorScaleが活躍する場面
- 複数の製品や店舗の売上実績の比較
- Webサイトのアクセス数や顧客満足度の分布
- 気温や湿度などの観測データ
コード例:売上実績を緑→黄→赤の3色スケールで可視化
最小値を緑、中間値(50パーセンタイル)を黄、最大値を赤として、売上実績を色分けしてみましょう。
# ... openpyxlのインポート等は省略 ...
from openpyxl.formatting.rule import ColorScaleRule
from openpyxl.styles.colors import Color
# 3色のカラースケールルールを作成
# 中間点(mid)も指定できる
rule = ColorScaleRule(
start_type='min', start_color='63BE7B', # 緑
mid_type='percentile', mid_value=50, mid_color='FFEB84', # 黄
end_type='max', end_color='F8696B' # 赤
)
# 先ほどのデータのB1:B4に適用
ws.conditional_formatting.add('B1:B4', rule)
wb.save("colorscale_sample.xlsx")このExcelを開けば、どの店舗の売上が好調で、どの店舗が不調なのかが色の印象だけで直感的に理解できます。
【活用術②】DataBarで数値を直感的なグラフにする
DataBar(データバー)は、セルの中にその値の大きさに応じた横棒グラフを描画する機能です。同じ列にある他の数値と比較して、その値がどの程度の位置にあるのかを瞬時に把握できます。
DataBarの強力な可視化能力
- プロジェクトやタスクの進捗率(0〜100%)の可視化
- アンケートの回答結果(5段階評価など)の比較
- 各項目の予算執行率の比較
コード例:進捗率をセル内バーで表現する
各タスクの進捗率をデータバーで表現してみましょう。
# ... openpyxlのインポート等は省略 ...
from openpyxl.formatting.rule import DataBarRule
# サンプルデータ(進捗率)
progress_data = [10, 80, 55, 100, 30]
for i, p in enumerate(progress_data, 1):
ws[f'C{i}'] = p
# データバールールを作成
# 最小値0, 最大値100の範囲でバーを表示
rule = DataBarRule(
start_type='num', start_value=0,
end_type='num', end_value=100,
color="638EC6" # バーの色
)
# C1からC5に適用
ws.conditional_formatting.add('C1:C5', rule)
wb.save("databar_sample.xlsx")数値とグラフが一体化しているため、詳細な数値を確認しつつ、全体の中での相対的な大きさも同時に把握できます。
まとめ
今回は、openpyxlのConditionalFormattingを使い、Excelレポートを劇的に見やすくする「活用術」として、特にColorScaleとDataBarに焦点を当てて解説しました。
ConditionalFormattingの基本は「書式」「ルール」「追加」の3ステップ。- **
ColorScale**を使えば、数値の分布や温度感を色のグラデーションで直感的に表現できる。 - **
DataBar**を使えば、セル内に横棒グラフを描画し、数値の相対的な大きさを瞬時に比較できる。
PythonでデータをExcelに出力するだけでなく、もう一歩踏み込んで「伝わる」レポートを自動生成するために、ぜひConditionalFormattingを使いこなしてみてください。分析や報告のスピードが格段にアップするはずです。


コメント